Уже есть несколько хороших ответов, но ни один из них не рассматривает полный список того, что в настоящее время поддерживает оператор __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
:
Добавляет оператор "с"в качестве ключевого слова в 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+, поскольку использование более старой версии вызовет исключение времени выполнения.
Ссылки: