为什么我们在导入print_function后调用print(在Python 2.6中)

H2O*_*aCl 60 python import

要获得3.0打印功能,我们在Python 2.6中执行以下操作:

from __future__ import print_function
Run Code Online (Sandbox Code Playgroud)

但要使用函数我们调用print()而不是print_function().这只是一个不一致还是有充分的理由呢?

为什么不是以下内容:

from __future__ import print
Run Code Online (Sandbox Code Playgroud)

kin*_*all 47

原因是,当您从中导入时,__future__实际上只是设置一个标志,告诉解释器的行为与平时略有不同 - 在这种情况下print_function,该print()函数可用于代替语句.__future__因此,该模块是"特殊的"或"魔术" - 它不像通常的模块那样工作.

  • 磁盘上有一个名为__future__的模块,其中有一个名为`print_function`的东西,但实际的魔法正在其他地方发生. (6认同)
  • 你可以*设置那个标志一旦设置吗? (4认同)
  • 这是一个真实的模块. (3认同)
  • 学到了新的东西并相应地更新了我的答案. (3认同)

Sen*_*ran 11

print_function是一个FeatureName无法与混淆print内置函数本身.它是未来可用的功能,因此您可以使用它可以提供的内置功能.

其他功能包括:

all_feature_names = [
    "nested_scopes",
    "generators",
    "division",
    "absolute_import",
    "with_statement",
    "print_function",
    "unicode_literals",
]
Run Code Online (Sandbox Code Playgroud)

有一些特定的原因,当您将代码迁移到下一个更高版本时,您的程序将保持不变,例如使用更新的功能而不是__future__版本.此外,如果它是函数名称或关键字本身,它可能会导致解析器混淆.