我具有以下功能签名:
# my signature
def myfunction(x, s, c=None, d=None):
# some irrelevant function body
我需要一些位置参数。如何返回位置参数(x&s)的数字(2)。关键字参数的数量无关。
答案 0 :(得分:4)
您可以获取所有参数的数量(使用f.__code__.co_argcount
),关键字参数的数量(使用f.__defaults__
),然后从第一个参数中减去后者:
def myfunction(x, s, c=None, d=None):
pass
all_args = myfunction.__code__.co_argcount
if myfunction.__defaults__ is not None: # in case there are no kwargs
kwargs = len(myfunction.__defaults__)
else:
kwargs = 0
print(all_args - kwargs)
输出:
2
来自Docs:
__defaults__
:包含具有默认值的那些参数的默认参数值的元组;如果没有参数具有默认值,则为None
。
和:
co_argcount
是位置参数(包括具有默认值的参数)的数量;
答案 1 :(得分:1)
您可以使用inspect
这样的模块来完成此操作,
>>> import inspect
>>> def foo(a, b, *, c=None):
... print(a, b, c)
...
>>> sig = inspect.signature(foo)
>>> sum(1 for param in sig.parameters.values() if param.kind == param.POSITIONAL_OR_KEYWORD)
2
警告是,
Python没有用于定义仅位置参数的显式语法, 但是许多内置和扩展模块功能(尤其是那些 只接受一个或两个参数的人)接受它们。