有时候可能会有这种场景:你在不执行一个函数的情况下,想预先知道这个函数的参数,可以通过 inspect 来获取:

from inspect import signature


def test(a: str, b: int = 2) -> None:
    pass


sig = signature(test)
for k, v in sig.parameters.items():
    print(k, v, sep=' = ')  # key 是参数名, value 是一个对象,里面封装了参数的一些信息
    print(
        v.annotation,  # 参数的注解
        v.kind,        # 参数类型:是关键字参数,还是位置参数等 POSITIONAL_OR_KEYWORD, ...
        v.name,        # 参数名
        v.default,     # 参数的默认值,没有默认值的话:inspect._empty
        sep=' | '
    )

上面的结果:

a = a: str
<class 'str'> | POSITIONAL_OR_KEYWORD | a | <class 'inspect._empty'>
b = b: int = 2
<class 'int'> | POSITIONAL_OR_KEYWORD | b | 2