5.26 如何获取一个函数设定的参数

http://image.iswbm.com/20200804124133.png

在 Python 中有一个叫 inspect 的库,非常的好用,利用它可以获取一些数据,这在写一些框架时非常有用。

比如有下面这样一个函数

def demo(name, age, gender="male", *args, **kw):
    pass

使用 inspect 可以直接获取

>>> from inspect import signature
>>>
>>> sig = signature(demo) # # 获取函数签名
>>> sig
<Signature (name, age, gender='male', *args, **kw)>

利用 inspect 还可以检查传参是否匹配签名

>>> sig.bind("王炳明", 27)
<BoundArguments (name='王炳明', age=27)>
>>>
>>> sig.bind("王炳明")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python3.6/inspect.py", line 2997, in bind
    return args[0]._bind(args[1:], kwargs)
  File "/usr/lib64/python3.6/inspect.py", line 2912, in _bind
    raise TypeError(msg) from None
TypeError: missing a required argument: 'age'