python标准库-inspect的signature

概述

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]

原文出处:/show_1EF2LrZpVIRm.html