1

inspect.getargspec对 Python3.4 中 Python 的内置映射的行为感到困惑。

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 的长度,并且默认值很简单。但是,此技术在此处返回错误的结果。

4

1 回答 1

1

getargspec()在 Python 3.4 中更改了其文档字符串以指定接受“可调用getfullargspec()对象”的调用——过去是“函数”。map不是函数,但它是可调用的(返回map对象),因此没有错误。

该更新可能与Python 3.4 中 Argument Clinic的引入有关,即现在可以内省一些内置可调用对象,例如:

>>> 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没有使用参数诊所记录对象。它使用自定义代码来解析输入 args。正确的行为是提高ValueError("unsupported callable")(不是TypeError)。

于 2014-05-06T13:33:37.797 回答