概述
inspect模块用于收集python对象的信息,可以获取类或函数的参数的信息,源码,解析堆栈,对对象进行类型检查等等
功能强大,本章主要介绍 函数签名
signature
提取函数签名,获取函数形参等信息
定义测试用的函数
'''
name是str类型
age是int类型
likes是list类型
'''
def fun(name,age,likes):
pass
对函数进行签名
sig = signature(f)
获取函数形参名等信息
print(sig.parameters)
结果如下:
OrderedDict([('name', <Parameter "name">), ('age', <Parameter "age">), ('likes', <Parameter "likes">)])
遍历上面的结果,并查看类型
for key,value in sig.parameters.items():
print(key,value,type(key),type(value))
name name <class 'str'> <class 'inspect.Parameter'>
age age <class 'str'> <class 'inspect.Parameter'>
likes likes <class 'str'> <class 'inspect.Parameter'>
参数类型并不正确
给函数绑定形参类型
sigtypes = sig.bind_partial(int,str,list).arguments
print(sigtypes)
结果为:
rderedDict([('name', <class 'int'>), ('age', <class 'str'>), ('likes', <class 'list'>)])
遍历上面的结果
for key,value in sigtypes.items():
print(key,value)
结果为:
name <class 'int'>
age <class 'str'>
likes <class 'list'>
给函数绑定参数值
sigvalues = sig.bind_partial(1,2,[1,2,3]).arguments
print(sigvalues)
结果为:
OrderedDict([('name', 1), ('age', 2), ('likes', [1, 2, 3])])
遍历上面的结果
for key,value in sigvalues.items():
print(key,value)
结果为:
name 1
age 2
likes [1, 2, 3]