Уже есть несколько хороших ответов, но ни один из них не содержит полного списка того, что в __future__
настоящее время поддерживает это утверждение.
Проще говоря, это __future__
утверждение заставляет интерпретаторов Python использовать новые возможности языка.
В настоящее время он поддерживает следующие функции:
nested_scopes
До Python 2.1 следующий код вызывал бы ошибку NameError :
def f():
...
def g(value):
...
return g(value-1) + 1
...
from __future__ import nested_scopes
Директива позволит этой функции должна быть включена.
generators
Введены функции генератора, такие как приведенная ниже, для сохранения состояния между последовательными вызовами функций:
def fib():
a, b = 0, 1
while 1:
yield b
a, b = b, a+b
division
Классическое разделение используется в версиях Python 2.x. Это означает, что некоторые операторы деления возвращают разумное приближение деления («истинное деление»), а другие возвращают слово («деление по полу»). Начиная с Python 3.0, истинное деление определяется как x/y
, тогда как нижнее деление определяется как x//y
.
В from __future__ import division
директиве прижимает использование Python 3.0 разделения стиля.
absolute_import
Позволяет заключить в скобки несколько import
операторов. Например:
from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
LEFT, DISABLED, NORMAL, RIDGE, END)
Вместо:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \
LEFT, DISABLED, NORMAL, RIDGE, END
Или:
from Tkinter import Tk, Frame, Button, Entry, Canvas, Text
from Tkinter import LEFT, DISABLED, NORMAL, RIDGE, END
with_statement
Добавляет оператор with
как ключевое слово в Python, чтобы исключить необходимость в try/finally
утверждениях. Обычно это используется при выполнении файлового ввода-вывода, например:
with open('workfile', 'r') as f:
read_data = f.read()
print_function
:
Принудительно использует print()
вызов функции в стиле круглых скобок Python 3 вместо print MESSAGE
выражения стиля.
unicode_literals
Вводит буквальный синтаксис для bytes
объекта. Это означает, что такие заявления bytes('Hello world', 'ascii')
могут быть просто выражены как b'Hello world'
.
generator_stop
Заменяет использование StopIteration
исключения, используемого внутри функций генератора, RuntimeError
исключением.
Еще одно использование, не упомянутое выше, заключается в том, что для этого __future__
утверждения также требуется использование интерпретаторов Python 2.1+, поскольку использование более старой версии вызовет исключение времени выполнения.
Ссылки