计算函数签名中的位置参数

Bra*_*pel 7 python python-3.x

我有以下函数签名:

# my signature
def myfunction(x, s, c=None, d=None):
    # some irrelevant function body
Run Code Online (Sandbox Code Playgroud)

我需要位置参数的数量。如何返回位置参数 (x & s) 的数量 (2)。关键字参数的数量不相关。

MrG*_*eek 8

您可以获取所有参数的数量(使用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)
Run Code Online (Sandbox Code Playgroud)

输出:

2
Run Code Online (Sandbox Code Playgroud)

文档

__defaults__:包含默认参数值的元组,这些参数具有默认值,或者None如果没有参数具有默认值。

和:

co_argcount 是位置参数的数量(包括具有默认值的参数);