在Python 3.4下解释inspect.getargspec(map)?

时间:2014-05-06 00:20:25

标签: python python-3.x python-3.4

我对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,默认值很简单。这种技术虽然在这里返回了错误的结果。

1 个答案:

答案 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)。