在Python 3 中是否有可能获得一个函数需要多少个位置参数?

Is it possible to get how many positional arguments does a function need in Python 3?

我正在寻找一种方法来获取函数在 Python 中需要多少个位置参数 3.
像这样:

def a():pass # 0 positional arguments
def b(x):pass # 1 positional argument
def c(x=0):pass # 0 positional arguments
def d(x,y=0):pass # 1 positional argument
def e(x,y):pass # 2 positional arguments
def f(x=0,y=0):pass # 0 positional arguments

您可以为此使用 inspect 模块:

import inspect

def count_positional_args_required(func):
    signature = inspect.signature(func)
    empty = inspect.Parameter.empty
    total = 0
    for param in signature.parameters.values():
        if param.default is empty:
            total += 1
    return total

def a():pass # 0 positional arguments
def b(x):pass # 1 positional argument
def c(x=0):pass # 0 positional arguments
def d(x,y=0):pass # 1 positional argument
def e(x,y):pass # 2 positional arguments
def f(x=0,y=0):pass # 0 positional arguments

for func in [a,b,c,d,e,f]:
    print(count_positional_args_required(func))

编辑: 以上仅适用于非内置函数。