почему мы вызываем печать после импорта функции печати (в Python 2.6)
чтобы получить функцию печати 3.0, мы делаем следующее в Python 2.6:
from __future__ import print_function
но для использования функции мы вызываем print () не print_function (). Это просто несовместимость или есть веская причина для этого?
почему бы не следующее:
from __future__ import print
5 ответов:
причина в том, что при импорте из
__future__вы действительно просто устанавливаете флаг, который говорит интерпретатору вести себя немного иначе, чем обычно-в случаеprint_functionнаprint()функция становится доступной вместо оператора. Элемент__future__модуль таким образом" особенный "или" волшебный " -- он не работает как обычные модули.
print_functionэтоFeatureNameне путать сдругие функции включают в себя:
all_feature_names = [ "nested_scopes", "generators", "division", "absolute_import", "with_statement", "print_function", "unicode_literals", ]есть определенные причины, как при переносе кода на следующую более высокую версию, ваша программа останется такой, как использовать обновленную функцию вместо
__future__версия. Также если это было имя функции или ключевое слово сам по себе он может вызвать путаницу в парсере.
простой. печать является ключевым словом в Python 2.
Так себе, как
from somewhere import printбудет автоматически SyntaxError в Python 2.
разрешение (жесткое кодирование в синтаксисе)
from __future__ import printсчиталось, что это не стоит усилий.
в Python 3, ключевое слово
вместо того, чтобы сказать
print valueтеперь вам нужно сказатьprint(value), или вы получитеSyntaxError.делая
import, это изменение также выполняется в Python 2, поэтому вы можете писать программы, используя тот же синтаксис, что и Python 3 (по крайней мере, до есть).
минимальный пример
>>> 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(1)работает безfrom __future__ import print_functionв Python 2потому что:
print(1)анализируется как:
print (1) ^^^^^ ^^^ 1 2
- аргумент
вместо:
print( 1 ) ^^^^^^ ^ ^ 1 2 1
print()функции- аргумент
и:
assert 1 == (1)как уже упоминалось в: правило синтаксиса кортежа Python с запятыми
Comments