__future__ в Python

Hemank Mehtani 30 Январь 2023 9 Июль 2021
  1. Используйте __future__ для print_function в Python
  2. Используйте __future__ для unicode_laterals в Python
  3. Используйте __future__ для разделения в Python
  4. Используйте __future__ для absolute_import в Python
  5. Используйте __future__ для annotations в Python
  6. Используйте __future__ для вложенных областей
  7. Используйте __future__ для генераторов Python
  8. Используйте __future__ для утверждения with
__future__ в Python

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()