Почему мы вызываем печать после импорта 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
  • Аргумент

вместо:

print( 1 )
^^^^^^ ^ ^
1      2 1
  • print() Функция
  • Аргумент

и

assert 1 == (1)

как упоминалось в: Корректное синтаксическое правило запятой для кортежа Python