目前,当我使用Python 2.7.6时,我似乎得到的是在Python 3.3之前添加了flush关键字参数的print()版本,根据文档。我的系统(Ubuntu)安装了Python 3.4,并且我验证了它的print()函数具有flush参数。
如何从3.4中导入print()函数?__future__从哪里获取旧的print函数?
目前,当我使用Python 2.7.6时,我似乎得到的是在Python 3.3之前添加了flush关键字参数的print()版本,根据文档。我的系统(Ubuntu)安装了Python 3.4,并且我验证了它的print()函数具有flush参数。
如何从3.4中导入print()函数?__future__从哪里获取旧的print函数?
不能将3.4版本导入到Python 2.7中,不行。只需在打印后手动清空sys.stdout
:
你不能从3.4版本导入到Python 2.7中,不可以。打印后请手动清空sys.stdout
:
import sys
print(...)
sys.stdout.flush()
如果你必须使用关键字参数,那么你可以创建一个围绕着print()
的包装函数:
from __future__ import print_function
import sys
try:
# Python 3
import builtins
except ImportError:
# Python 2
import __builtin__ as builtins
def print(*args, **kwargs):
sep, end = kwargs.pop('sep', ' '), kwargs.pop('end', '\n')
file, flush = kwargs.pop('file', sys.stdout), kwargs.pop('flush', False)
if kwargs:
raise TypeError('print() got an unexpected keyword argument {!r}'.format(next(iter(kwargs))))
builtins.print(*args, sep=sep, end=end, file=file)
if flush:
file.flush()
这将创建一个替代版本,与3.3及以上版本的版本完全相同。
__future__
导入会改变语法解析。这个导入禁用了 print
作为关键字的识别。这允许正常访问内置的 print()
函数,该函数始终存在,但通常被 print
关键字的识别所掩盖。如果没有 __future__
导入,可以通过 import __builtin__ as b; b.__dict__['print']
访问它。 - Terry Jan Reedyfrom __future__
导入是语法标志;解析器和编译器会改变行为。在Python 2中,print()
函数只是一个内置函数,但通常无法使用它,因为print
是保留关键字和语句。通过导入,编译器会删除该关键字保留和语句。 - Martijn Pieters__future__
导入实际上并不像通常意义上的导入任何东西。使用 from __future__ import print_function
就像告诉 Python 2.7:“我想要以不同的方式使用 print
”。它实际上并没有从 Python 3 中加载任何代码,只是告诉 Python 2.7 使用已经内置在其中的不同“模式”。 - BrenBarn