我希望能够根据参数的数量对未知函数/ 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 +
,那就太好了答案 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
不要公开有关其签名的信息。对于其余的getargspec
(getfullargspec
周围的薄包装)和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__))