- __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
- Примеры
- division
- unicode_literals
- annotations
- barry_as_FLUFL
- man
__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='')
Обратите внимание, что print здесь используется как функция, которая ранее использовалась как оператор в Python 2.x.
Используйте __future__ для unicode_laterals в Python
Это позволяет вам изменять тип строковых литералов.
Строковые литералы в Python 2 по умолчанию являются ‘str’, но если мы используем from __future__ import unicode_literals , тип строкового литерала изменится на Unicode .
Но с from __future__ import unicode_literals мы получаем следующий вывод.
from __future__ import unicode_literals type("h")
Обратите внимание, что при использовании from __future__ import нам не нужно добавлять к каждой строке префикс u , чтобы рассматривать ее как Unicode .
Используйте __future__ для разделения в Python
В версиях Python 2.x используется классическое разделение.
Простое деление 8 на 7 возвращает 0 в Python 2.x.
Использование from __future__ import division позволяет программе Python 2 использовать __truediv__() .
from __future__ import division print(8/7)
Используйте __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()
Copyright © 2023. All right reserved
__future__ Python
Если вы просто изучаете Python 3 модуль future вам не нужен.
Он используется для совместимости давно устаревшего Python 2 с современным Python 3 кодом и наоборот. Также для совместимости некоторых старых 3.X версий с новыми. В общем для работы с legacy.
Импортировать из __future__ нужно в самом начале скрипта сразу за docstring если она есть.
python-future — это недостающий уровень совместимости между Python 2 и Python 3. Это позволяет вам использовать единую чистую кодовую базу, совместимую с Python 3.x, для поддержки как Python 2, так и Python 3 с минимальными затратами.
Он предоставляет будущие и прошлые пакеты с обратными портами и прямыми портами функций из Python 3 и 2. Он также поставляется с futurize и pasteurize, настраиваемыми скриптами на основе 2to3, которые помогут вам легко конвертировать код Py2 или Py3 для поддержки Python 2 и 3 в единой чистой кодовой базе в стиле Py3, модуль за модулем.
Известными проектами, использующими python-future для совместимости с Python 2/3, являются Mezzanine и ObsPy.
Описание модуля можно изучить здесь
Примеры
division
Рассмотрим деление в Python 3
Python 3.8.10 (default, Nov 14 2022, 12:59:47) [GCC 9.4.0] on linux Type «help», «copyright», «credits» or «license» for more information. >>> >>> 2 / 3 0.6666666666666666
В Python 2 деление по умолчанию целочисленное, но с помощью __future__ можно импортировать division и тогда деление заработает как в третьем Python
Python 2.7.5 (default, Jun 28 2022, 15:30:04) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2 Type «help», «copyright», «credits» or «license» for more information. >>> >>> 2 / 3 0 >>> from __future__ import division >>> 2 / 3 0.6666666666666666
unicode_literals
>>> type(«») >>> from __future__ import unicode_literals >>> type(«»)
annotations
Рассмотрим класс C и classmethod make()
Если запустить скрипт ошибки не будет
# t.py class C : @ classmethod def make (cls): return cls()
Добавим typehint (аннотацию) в которой используем переменную. Появится ошибка, так как переменная не определена.
# t.py class C : @ classmethod def make (cls) -> C: return cls()
Traceback (most recent call last): File «t.py», line 3, in class C: File «t.py», line 5, in C def make(cls) -> C: NameError: name ‘C’ is not defined
Ошибки не будет, например, если вместо переменной C использовать в аннотации строку «C», но это не то, что нам нужно.
# t.py class C : @ classmethod def make (cls) -> «C» : return cls()
Попробуем использовать __future__
# t.py from __future__ import annotations class C : @ classmethod def make (cls) -> C: return cls()
barry_as_FLUFL
Python 2.7.5 (default, Jun 28 2022, 15:30:04) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2 Type «help», «copyright», «credits» or «license» for more information. >>> >>> >>> 0 <> 0 False >>> 0 <> 1 True
В Python 3 такой оператор не предусмотрен
Python 3.8.10 (default, Nov 14 2022, 12:59:47) [GCC 9.4.0] on linux Type «help», «copyright», «credits» or «license» for more information. >>> >>> >>> 0 <> 0 File «», line 1 0 <> 0 ^ SyntaxError: invalid syntax >>> from __future__ import barry_as_FLUFL >>> >>> 0 <> 0 False >>> 0 <> 1 True
man
python -m pydoc __future__