我对Python在Python3.4中inspect.getargspec
下的内置地图的行为感到困惑。
In [1]: import inspect
In [2]: inspect.getargspec(map)
Out[2]: ArgSpec(args=[], varargs=None, keywords=None, defaults=None)
In [3]: import sys
In [4]: sys.version_info
Out[4]: sys.version_info(major=3, minor=4, micro=0, releaselevel='final', serial=0)
它说没有任何论据。它曾经是错误的,这是更好的。
特别是我试图了解函数需要多少个参数。我的旧技术是返回argspec.args的长度,如果是varargs,默认值很简单。这种技术虽然在这里返回了错误的结果。
答案 0 :(得分:1)
getargspec()
调用getfullargspec()
,在Python 3.4中更改了其文档字符串,以指定'可调用对象'被接受 - 这是'功能'在过去。 map
不是函数,但它是可调用的(返回map
个对象),因此没有错误。
更新可能与Argument Clinic in Python 3.4的引入有关,即现在可以反省一些内置的callables,例如:
>>> import binascii
>>> import inspect
>>> inspect.getargspec(binascii.a2b_uu)
ArgSpec(args=['data'], varargs=None, keywords=None, defaults=None)
它适用于Python 3.4但在Python 3.3中失败
使用参数诊所未记录 map
对象。它使用custom code to parse input args。正确的行为是提升ValueError("unsupported callable")
(不是TypeError
)。