__future__
часто появляется в модулях Python. Я не понимаю , что __future__
это и как / когда использовать его даже после прочтения питона __future__
дока .
Кто-нибудь может объяснить примерами?
Несколько ответов относительно основного использования, которое __future__
я получил, казалось правильным.
Тем не менее, мне нужно понять еще одну вещь относительно того, как __future__
работает:
Наиболее запутанная концепция для меня заключается в том, как текущий выпуск Python включает в себя функции для будущих выпусков, и как программа, использующая функцию из будущего выпуска, может быть успешно скомпилирована в текущей версии Python.
Я предполагаю, что текущий выпуск упакован с потенциальными функциями на будущее. Однако функции доступны только при использовании, __future__
поскольку они не соответствуют текущему стандарту. Дайте мне знать, если я прав.
источник
Ответы:
С
__future__
включением модуля вы можете постепенно привыкать к несовместимым изменениям или к таким, которые вводят новые ключевые слова.Например, для использования контекстных менеджеров вы должны были сделать это
from __future__ import with_statement
в 2.5, так какwith
ключевое слово было новым и больше не должно использоваться в качестве имен переменных. Чтобы использоватьwith
в качестве ключевого слова Python в Python 2.5 или более ранней версии, вам нужно использовать импорт сверху.Другой пример
Без
__future__
материала обаprint
утверждения будут напечатаны1
.Внутренняя разница заключается в том, что без этого импорта метод
/
сопоставляется__div__()
, а вместе с ним__truediv__()
используется. (В любом случае//
звонит__floordiv__()
.)Кстати
print
:print
становится функцией в 3.x, теряя свое специальное свойство в качестве ключевого слова. Так что все наоборот.источник
from __future__ import braces
: рprint
это определенно функция, но могут быть и другие функции, которые можно использовать__future__
. (Изменить: см. Docs.python.org/3/library/__future__.html, где он все еще используется.)Когда вы делаете
На самом деле вы используете не
import
утверждение, а будущее заявление . Вы читаете не те документы, так как вы на самом деле не импортируете этот модуль.Будущие операторы особенные - они изменяют способ анализа вашего модуля Python, поэтому они должны находиться в верхней части файла. Они дают новое - или другое - значение для слов или символов в вашем файле. Из документов:
Если вы действительно хотите импортировать
__future__
модуль, просто выполнитеа затем получить к нему доступ, как обычно.
источник
from __future__ import print_function
оба изменяют поведениеprint
ключевого слова и влияют на время выполнения, эквивалентноеprint_function = __import__("__future__").print_function
__future__
это псевдомодуль, который программисты могут использовать для включения новых языковых функций, которые не совместимы с текущим интерпретатором . Например, выражение в11/4
настоящее время оценивается как2
. Если модуль, в котором он выполняется, включил истинное деление, выполнив:from __future__ import division
выражение
11/4
будет оценивать до2.75
. Импортируя__future__
модуль и оценивая его переменные, вы можете видеть, когда новая функция была впервые добавлена к языку и когда она станет значением по умолчанию:источник
import __future__ xyz
является ли запретным?Он может быть использован для использования функций, которые появятся в более новых версиях при наличии более старой версии Python.
Например
позволит вам использовать
print
в качестве функции:источник
Уже есть несколько хороших ответов, но ни один из них не содержит полного списка того, что в
__future__
настоящее время поддерживает это утверждение.Проще говоря, это
__future__
утверждение заставляет интерпретаторов Python использовать новые возможности языка.В настоящее время он поддерживает следующие функции:
nested_scopes
До Python 2.1 следующий код вызывал бы ошибку NameError :
from __future__ import nested_scopes
Директива позволит этой функции должна быть включена.generators
Введены функции генератора, такие как приведенная ниже, для сохранения состояния между последовательными вызовами функций:
division
Классическое разделение используется в версиях Python 2.x. Это означает, что некоторые операторы деления возвращают разумное приближение деления («истинное деление»), а другие возвращают слово («деление по полу»). Начиная с Python 3.0, истинное деление определяется как
x/y
, тогда как нижнее деление определяется какx//y
.В
from __future__ import division
директиве прижимает использование Python 3.0 разделения стиля.absolute_import
Позволяет заключить в скобки несколько
import
операторов. Например:Вместо:
Или:
with_statement
Добавляет оператор
with
как ключевое слово в Python, чтобы исключить необходимость вtry/finally
утверждениях. Обычно это используется при выполнении файлового ввода-вывода, например: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+, поскольку использование более старой версии вызовет исключение времени выполнения.Ссылки
источник
Или это как сказать «Поскольку это Python v2.7, используйте эту другую функцию« печать », которая также была добавлена в Python v2.7, после того, как она была добавлена в Python 3. Поэтому мой« печать »больше не будет операторами (например, print «message»), но функции (например, print («message», options)). Таким образом, когда мой код запускается в python 3, «print» не сломается ».
В
print_function - это модуль, содержащий новую реализацию print в соответствии с его поведением в python v3.
Это имеет больше объяснения: http://python3porting.com/noconv.html
источник
Одним из применений, которое я считаю очень полезным, является модуль
print_function
from__future__
.В Python 2.7 я хотел, чтобы символы из разных операторов print печатались в одной строке без пробелов.
Это может быть сделано с помощью запятой (",") в конце, но это также добавляет дополнительный пробел. Вышеприведенное утверждение при использовании в качестве:
Это выведет значение
v_num
каждой итерации в одну строку без пробелов.источник
Начиная с Python 3.0, print больше не просто оператор, а функция. и включен в PEP 3105.
Также я думаю, что пакет Python 3.0 все еще обладает этими специальными функциями. Давайте посмотрим на его удобство использования через традиционную «программу Pyramid» на Python:
Если мы используем обычную функцию печати, мы не сможем добиться того же результата, так как print () поставляется с дополнительной новой строкой. Поэтому каждый раз, когда выполняется внутренний цикл for, он будет печатать * на следующей строке.
источник