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

why do we invoke print after importing print_function (in Python 2.6)

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

1
from __future__ import print_function

但要使用函数,我们调用print()而不是print_函数()。这只是不一致还是有充分的理由?

为什么不:

1
from __future__ import print


原因是,当你从__future__进出你真是只设置标志位的解释器的行为——对differently在比通常的情况print_functionprint()功能是可用的,在原位的语句。因此,该模块是一__future__"特殊"或"魔术"——它不是像通常的模的工作。


FeatureNameprint_function是不被混淆与print内置函数本身。它的特征是:从未来的操作系统,你可以使用内置的功能,它可以提供。

其他的特征包括:

1
2
3
4
5
6
7
8
9
all_feature_names = [
   "nested_scopes",
   "generators",
   "division",
   "absolute_import",
   "with_statement",
   "print_function",
   "unicode_literals",
]

当你有你的特异性更高的代码迁移到下一个版本,你的程序仍将使用最新的特征。如《__future__版本。如果它也为函数名称或关键字本身的原因,它可能混淆的语法分析器。


简单的。打印是Python中的关键字。

表操作类

1
from somewhere import print

将是一个自动查询Python中的2。

让(硬编码它的语法)

1
from __future__ import print

被认为是不值得的努力。


在Python中,已改变了从print关键字调用语句来调用函数。

所以你现在要说而说print valueprint(value),或你会得到SyntaxError

通过做这样的变化是effected import,Python中的SO 2,太,你可以使用相同的语法写的Python程序3(至少是远的print而言)。


是目前可用的完整性,所有的特点是:

1
2
3
4
5
6
7
8
9
10
11
12
13
+------------------+-------------+--------------+----------------------------------------------------+
|     feature      | optional in | mandatory in |                       effect                       |
+------------------+-------------+--------------+----------------------------------------------------+
| nested_scopes    | 2.1.0b1     |          2.2 | PEP 227: Statically Nested Scopes                  |
| generators       | 2.2.0a1     |          2.3 | PEP 255: Simple Generators                         |
| division         | 2.2.0a2     |          3.0 | PEP 238: Changing the Division Operator            |
| absolute_import  | 2.5.0a1     |          3.0 | PEP 328: Imports: Multi-Line and Absolute/Relative |
| with_statement   | 2.5.0a1     |          2.6 | PEP 343: The"with" Statement                      |
| print_function   | 2.6.0a2     |          3.0 | PEP 3105: Make print a function                    |
| unicode_literals | 2.6.0a2     |          3.0 | PEP 3112: Bytes literals in Python 3000            |
| generator_stop   | 3.5.0b1     |          3.7 | PEP 479: StopIteration handling inside generators  |
| annotations      | 3.7.0b1     |          4.0 | PEP 563: Postponed evaluation of annotations       |
+------------------+-------------+--------------+----------------------------------------------------+

最小的例子

1
2
3
4
5
6
7
8
>>> print     # Statement.

>>> from __future__ import print_function
>>> print     # Function object.
<built-in function print>
>>> print()   # Function call.

>>>

在上述的_:什么是未来的_ _ _ Python中的使用和如何使用它(当它的工作,以及如何在知识from __future__魔法语句是两个竞争的剖析器将Python代码。

特别是printfrom __future__ import print_function变化从报表到内置的功能,在交互中所示的壳。

为什么不from __future__ import print_functionPython中的print(1)厂2

因为:

1
print(1)

parsed:是的

1
2
3
print (1)
^^^^^ ^^^
1     2
  • print语句
  • 参数
  • 而不是:

    1
    2
    3
    print( 1 )
    ^^^^^^ ^ ^
    1      2 1
  • print()函数
  • 参数
  • 和:

    1
    assert 1 == (1)

    在上述的语法规则:Python元组尾随一个逗号