如何以编程方式确定函数/内置/可调参数的数量?

时间:2016-10-11 10:41:18

标签: python python-2.7 function python-3.x callable

我希望能够根据参数的数量对未知函数/ builtin / callable进行分类。

我可能会写一段代码:

if numberOfParameters(f) == 0:
    noParameters.append(f)
elif numberOfParameters(f) == 1:
    oneParameter.append(f)
else:
    manyParameters.append(f)

但我不知道如何实施numberOfParameters()inspect.getargspec不适用于builtins。我不能使用异常,因为调用该函数可能很昂贵。

如果解决方案适用于Python 2.7和Python 3.3 +

,那就太好了

2 个答案:

答案 0 :(得分:1)

来自Python 3.3

  

版本3.3中的新功能。

Introspecting callables with the Signature object

eA[A.isnull()] = np.nan

然后你可以数数,并做任何你喜欢的事。

答案 1 :(得分:0)

您可以稍微执行此操作,但仅限于Python 3.这是ArgumentClinic提供有关可用对象签名的信息。

请注意,目前并非所有内置插件实际上都可用,目前:

__import__ vars max print dir __build_class__ min iter round getattr next 

不要公开有关其签名的信息。对于其余的getargspecgetfullargspec周围的薄包装)和Signature会这样做。

在Python 2中,你只有getargspec选项,它不能用于内置函数,也可能永远不会。因此,没有跨越python版本的解决方案。对于最兼容的解决方案,我现在使用getargspec

至于最简单的检查方式,只需计算args返回的NamedTuple

def NumberOfParameters(f):
    try:
        r = getargspec(f)
        return len(r.args)  # if it has kwargs, what do you do?
    except TypeError as e:
        print("Function {0} cannot be inspected".format(f.__name__))