我注意到在使用from __future__ import print_function
导入后,我无法使用新的python函数刷新。在我发现我发现的原因的过程中,我甚至无法检查它所需的参数/参数。为什么?
这就是我所做的:
from __future__ import print_function
import inspect
def f(a, b=1):
pass
#print( print_function )
print( inspect.getargspec( f ) )
g = print
print('what is print: ', print)
print('what is g=print: ', g)
print( inspect.getargspec( g ) )
#print( inspect.getargspec( print ) )
#print('Hello', flush=True)
除了检查打印外,一切都通过了:
ArgSpec(args=['a', 'b'], varargs=None, keywords=None, defaults=(1,))
what is print? <built-in function print>
what is g=print? <built-in function print>
Traceback (most recent call last):
File "print_future.py", line 16, in <module>
print( inspect.getargspec( g ) )
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 816, in getargspec
raise TypeError('{!r} is not a Python function'.format(func))
TypeError: <built-in function print> is not a Python function
为什么会这样?
这是我的python和系统的一些信息:
Python 2.7.11 (default, Jun 24 2016, 21:50:11)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
答案 0 :(得分:2)
摘自signature:
请注意
某些callables在某些实现中可能无法内省 蟒蛇。例如,在CPython中,C中定义的内置函数 没有提供有关其论点的元数据。
我发布了签名文档,因为inspect.getargspec自3.0以来已弃用
答案 1 :(得分:1)
在{3.3}中将flush
关键字添加到print()。
C函数通常不带有内省所需的信息。这只是C如何定义和编译的事实。作为替代,签名被添加到他们的文档字符串中。如果inspect不起作用,IDLE calltips将回退到docstring。
在3.4中,添加了一种新机制,以包含具有C编码功能的签名属性。新的inspect.signature在使用时使用它。一些C编码函数已被转换为包含新属性,许多没有。