您试图将内置函数(在 C 中实现)视为用户定义的函数。它们不是同一件事。 .func_code 仅为用户定义的函数定义(在 Python 中实现)。
__future__ module 仅包含有关功能的元数据,__future__.print_function 对象与print() 函数不是同一个对象。相反,该对象会告诉您更多关于哪个版本的 Python 最先支持该功能,以及在哪个版本中该功能成为强制性的(from __future__ 导入变为无操作),以及compile() 的位字段标志功能:
>>> import __future__
>>> __future__.print_function
_Feature((2, 6, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 65536)
>>> __future__.print_function.optional
(2, 6, 0, 'alpha', 2)
>>> __future__.print_function.mandatory
(3, 0, 0, 'alpha', 0)
>>> __future__.print_function.compiler_flag
65536
在 Python 2.7 中,print() 等内置函数对象根本没有足够的信息让您发现它们支持哪些参数。在 Python 3 中,这正在慢慢改变为 more and more built-in types are given metadata,但 print() 函数尚未在其中:
>>> import inspect
>>> inspect.signature(print)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mpietre/Development/Library/buildout.python/parts/opt/lib/python3.4/inspect.py", line 2045, in signature
return _signature_internal(obj)
File "/Users/mpietre/Development/Library/buildout.python/parts/opt/lib/python3.4/inspect.py", line 1947, in _signature_internal
skip_bound_arg=skip_bound_arg)
File "/Users/mpietre/Development/Library/buildout.python/parts/opt/lib/python3.4/inspect.py", line 1884, in _signature_from_builtin
raise ValueError("no signature found for builtin {!r}".format(func))
ValueError: no signature found for builtin <built-in function print>
我不确定你从哪里得到的想法,new 是 any Python 版本中print() 的有效关键字。不存在支持该论点的 Python 版本。
在 Python 2 中的 print() 中缺少并且在 Python 3.3 及更高版本中存在的唯一参数是 flush 参数,请参阅 Python 3 docs for print():
[...] 如果 flush 关键字参数为真,则流被强制刷新。
3.3 版更改:添加了 flush 关键字参数。
对此进行测试的唯一方法(使用sys.version_info >= (3, 3) 测试除外)是尝试使用它:
from io import StringIO
try:
print('', end='', flush=False, file=StringIO())
print_supports_flush = True
except TypeError:
print_supports_flush = False