__future__ в Python
-
Используйте
__future__
дляprint_function
в Python -
Используйте
__future__
дляunicode_laterals
в Python -
Используйте
__future__
для разделения в Python -
Используйте
__future__
дляabsolute_import
в Python -
Используйте
__future__
дляannotations
в Python -
Используйте
__future__
для вложенных областей -
Используйте
__future__
для генераторов Python -
Используйте
__future__
для утвержденияwith

future был введен в Python 2.1, и его инструкции меняют способ интерпретации кода Python. Он сообщает интерпретатору скомпилировать некоторые операторы как те, которые будут доступны в будущих версиях Python, т.е. Python использует функцию from future import feature для резервного копирования функций из более высоких версий Python в текущий интерпретатор.
Когда вы видите from __future__ import
, это означает, что функция из последней или предстоящей версии Python была перенесена в более раннюю версию.
В этом руководстве будут обсуждаться функции, уже включенные в Python 3 в более ранних версиях Python с использованием __future__
.
Используйте __future__
для print_function
в Python
Использование ключевого слова print в качестве функции вместо оператора придает ему большую гибкость, что помогает расширить возможности ключевого слова print
. Основная функция from __future__ import print_function
- перенести функцию print
из Python 3 в Python 2.
Например,
from __future__ import print_function
for x in range(0,10):
print(x, sep=' ', end='')
Выход:
0123456789
Обратите внимание, что print
здесь используется как функция, которая ранее использовалась как оператор в Python 2.x.
Используйте __future__
для unicode_laterals
в Python
Это позволяет вам изменять тип строковых литералов.
Строковые литералы в Python 2 по умолчанию являются ‘str’, но если мы используем from __future__ import unicode_literals
, тип строкового литерала изменится на Unicode
.
Например,
type("h")
Выход:
<type 'str'>
Но с from __future__ import unicode_literals
мы получаем следующий вывод.
from __future__ import unicode_literals
type("h")
Выход:
<type 'unicode'>
Обратите внимание, что при использовании from __future__ import
нам не нужно добавлять к каждой строке префикс u
, чтобы рассматривать ее как Unicode
.
Используйте __future__
для разделения в Python
В версиях Python 2.x используется классическое разделение.
print(8/7)
Выход
0
Простое деление 8 на 7 возвращает 0 в Python 2.x.
Использование from __future__ import division
позволяет программе Python 2 использовать __truediv__()
.
Например,
from __future__ import division
print(8/7)
Выход:
1.1428571428571428
Используйте __future__
для absolute_import
в Python
В Python 2 вы могли иметь только неявный относительный импорт, тогда как в Python 3 вы могли иметь явный или абсолютный импорт. __future__ import absolute_import
позволяет заключать в скобки несколько операторов импорта, заключенных в скобки.
Например,
from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
LEFT, DISABLED, NORMAL,END)
Обратите внимание, что без функции __future__ import absolute_import
вы не сможете заключить несколько операторов import
в одну строку кода.
Используйте __future__
для annotations
в Python
Аннотации - это выражения Python, связанные с различными частями функции.
Здесь использование from __future__ import annotations
меняет способ оценки типа аннотаций в модуле Python. Он откладывает оценку аннотаций и волшебным образом обрабатывает все аннотации как разные аннотации.
Например,
from __future__ import annotations
class C:
@classmethod
def make(cls) -> C:
return (cls)
Обратите внимание, что приведенный выше код будет работать только в том случае, если __future__ import
написано в верхней части кода, поскольку он изменяет то, как Python интерпретирует код, т.е. он обрабатывает аннотации как отдельные строки.
Используйте __future__
для вложенных областей
С добавлением __future__ import nested_scopes
в Python были введены статически вложенные области видимости. Он позволяет запускать следующие типы кода без возврата ошибки.
def h():
...
def m(value):
...
return m(value-1) + 1
...
Обратите внимание, что приведенный выше код вызвал бы ошибку NameError до Python 2.1.
Используйте __future__
для генераторов Python
Генератор - это функция в Python, определенная как обычная функция. Тем не менее, он делает это с ключевым словом yield, а не return всякий раз, когда ему нужно сгенерировать определенное значение.
Здесь с использованием from __future__ import generators
были введены функции генератора для сохранения состояний между последовательными вызовами функций.
Например,
def gen():
c, d = 0, 1
while 1:
yield d
c, d = d, c+d
Используйте __future__
для утверждения with
Это исключает использование операторов try...except
путем добавления оператора with
в качестве ключевого слова в Python. Он в основном используется при выполнении файлового ввода-вывода, как показано в примере ниже.
with open('workfile', 'h') as a:
read_data = a.read()