2.3 函数内省
g = 1
def foo(m, *args, n, **kwargs):
a = 1
b = 2foo.__globals__ # 全局变量,包含了 g = 1
foo.__name__ # foofoo.__code__.co_varnames # ('m', 'n', 'args', 'kwargs', 'a', 'b')
foo.__code__.co_argcount # 只计算参数个数,不考虑可变参数和仅限关键字参数,所以得到 1import inspect
sig = inspect.signature(foo) # 获取函数签名
sig.parameters['m'].kind # POSITIONAL_OR_KEYWORD 表示可以是定位参数或关键字参数
sig.parameters['args'].kind # VAR_POSITIONAL 定位参数构成的数组
sig.parameters['n'].kind # KEYWORD_ONLY 仅限关键字参数
sig.parameters['kwargs'].kind # VAR_KEYWORD 关键字参数构成的字典
inspect.getfullargspec(foo)
# 得到:ArgSpec(args=['m', 'n'], varargs='args', keywords='kwargs', defaults=None)Last updated