为什么我们在导入print_function之后调用print(在Python 2.6中)
为了获得3.0打印function,我们在Python 2.6中执行以下操作:
from __future__ import print_function
但是使用函数我们调用print()而不是print_function()。 这只是一个不一致或者是否有一个很好的理由呢?
为什么不是以下几点:
from __future__ import print
原因是,当你从__future__
导入的__future__
你实际上只是设置一个标志,告诉解释器的行为与往常不同 – 在print_function
的情况下, print()
函数可用来代替语句。 __future__
模块因此是“特殊”或“魔术” – 它不像通常的模块一样工作。
print_function
是一个FeatureName
不会与print
内置函数本身混淆。 这是将来可用的function,以便您可以使用它可以提供的内置function。
其他function包括:
all_feature_names = [ "nested_scopes", "generators", "division", "absolute_import", "with_statement", "print_function", "unicode_literals", ]
当您将代码迁移到更高版本时有特定的原因,您的程序将保持使用更新的function而不是__future__
版本。 此外,如果它是函数名称或关键字本身,它可能会导致parsing器混淆。
简单。 print是Python 2中的关键字。
所以这样的一个声明
from somewhere import print
将会是Python 2中的一个自动SyntaxError。
允许(在语法中对其进行硬编码)
from __future__ import print
被认为是不值得的努力。
在Python 3中,关键字print
已经从调用一个语句变为调用一个函数。
所以现在不需要说print(value)
,而是说print(value)
,否则你会得到一个SyntaxError
。
通过import
,这个改变也在Python 2中实现,所以你可以使用Python 3相同的语法编写程序(至less就print
而言)。
最小的例子
>>> print # Statement. >>> from __future__ import print_function >>> print # Function object. <built-in function print> >>> print() # Function call. >>>
正如在Python中使用什么__future__以及如何使用它以及它是如何工作 from __future__
是改变Pythonparsing代码的神奇语句。
from __future__ import print_function
特别是从一个语句print
变成一个内置函数,如上面的交互式shell所示。
为什么print(1)
在Python 2中不from __future__ import print_function
因为:
print(1)
被parsing为:
print (1) ^^^^^ ^^^ 1 2
-
print
声明 - 论据
代替:
print( 1 ) ^^^^^^ ^ ^ 1 2 1
-
print()
函数 - 论据
和:
assert 1 == (1)
如上所述: Python元组尾随逗号语法规则