为什么我们在导入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 
  1. print声明
  2. 论据

代替:

 print( 1 ) ^^^^^^ ^ ^ 1 2 1 
  1. print()函数
  2. 论据

和:

 assert 1 == (1) 

如上所述: Python元组尾随逗号语法规则