Почему мы вызываем печать после импорта print_function (в Python 2.6)
Чтобы получить функцию печати 3.0, мы делаем следующее в Python 2.6:
from __future__ import print_function
Но для использования функции мы вызываем print() not print_function(). Это просто несогласованность или есть веская причина для этого?
Почему бы не следующее:
from __future__ import print
Ответы
Ответ 1
Причина в том, что при импорте из __future__
вы действительно просто устанавливаете флаг, который говорит интерпретатору вести себя немного иначе, чем обычно - в случае print_function
выполняется функция print()
доступный вместо заявления. Таким образом, модуль __future__
является "особым" или "магическим" - он не работает, как обычные модули.
Ответ 2
print_function
является FeatureName
не путать с самой встроенной функцией print
.
Это функция, доступная из будущего, так что вы можете использовать встроенную функцию, которую он может предоставить.
Другие функции включают в себя:
all_feature_names = [
"nested_scopes",
"generators",
"division",
"absolute_import",
"with_statement",
"print_function",
"unicode_literals",
]
Существуют определенные причины, по которым при переносе кода в следующую более высокую версию ваша программа останется такой, какая использует обновленную функцию вместо версии __future__
. Также, если это имя функции или ключевое слово само по себе, это может вызвать путаницу с парсером.
Ответ 3
Simple. print - ключевое слово в Python 2.
Итак, утверждение типа
from somewhere import print
будет автоматическим SyntaxError в Python 2.
Разрешение (жесткое кодирование в синтаксисе)
from __future__ import print
считалось нецелесообразным.
Ответ 4
В Python 3 ключевое слово print
было изменено с вызова оператора на вызов функции.
Поэтому вместо того, чтобы говорить print value
, вам теперь нужно сказать print(value)
, или вы получите SyntaxError
.
Выполняя import
, это изменение также выполняется в Python 2, поэтому вы можете писать программы с использованием того же синтаксиса, что и Python 3 (по крайней мере, до print
).
Ответ 5
Минимальный пример
>>> print # Statement.
>>> from __future__ import print_function
>>> print # Function object.
<built-in function print>
>>> print() # Function call.
>>>
Как упоминалось в: Что такое __future__ в Python, который используется и как/когда его использовать, и как он работает from __future__
являются волшебными утверждениями, которые изменяют, как Python разбор кода.
from __future__ import print_function
в частности, изменения print
из инструкции во встроенную функцию, как показано в интерактивной оболочке выше.
Почему print(1)
работает без from __future__ import print_function
в Python 2
Потому что:
print(1)
анализируется как:
print (1)
^^^^^ ^^^
1 2
вместо:
print( 1 )
^^^^^^ ^ ^
1 2 1
и
assert 1 == (1)
как упоминалось в: Корректное синтаксическое правило запятой для кортежа Python