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

60 投票
6 回答
32005 浏览
提问于 2025-04-16 09:12

为了在Python 2.6中使用3.0版本的打印功能,我们可以这样做:

from __future__ import print_function

但是在使用这个功能时,我们调用的是print()而不是print_function()。这是因为不一致,还是有其他好的理由呢?

那为什么不这样呢:

from __future__ import print

6 个回答

4

在Python 3中,print这个关键词的用法发生了变化,从以前的语句变成了一个函数。

所以现在你不能再直接写 print value,而是需要写成 print(value),否则会出现 SyntaxError(语法错误)。

通过使用 import,在Python 2中也可以实现这个变化,这样你就可以用和Python 3一样的语法来写程序(至少在 print 这方面是这样的)。

13

print_function 是一个叫做 FeatureName 的特性,不要把它和内置的 print 函数搞混。它是一个来自未来的特性,这样你就可以使用它所提供的内置函数。

其他特性包括:

all_feature_names = [
    "nested_scopes",
    "generators",
    "division",
    "absolute_import",
    "with_statement",
    "print_function",
    "unicode_literals",
]

有一些特定的原因,比如当你把代码升级到更高的版本时,你的程序会保持原样,使用更新的特性,而不是 __future__ 版本。此外,如果它是函数名或关键字本身,可能会让解析器感到困惑。

48

原因是,当你从 __future__ 导入时,其实是在给解释器设置一个标志,让它的行为和通常有点不同。以 print_function 为例,它让 print() 这个函数可以使用,而不是像以前那样用语句来打印东西。可以说,__future__ 模块是“特别的”或“神奇的”——它的工作方式和普通模块不一样。

撰写回答