实用:python中函数的注解/签名(稽核函数inspect使用)

本文介绍了Python中如何利用函数注解和签名进行编程,并详细探讨了inspect模块在稽核函数中的应用,通过实例展示了inspect模块如何获取和检查函数信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import inspect
def add(x:int=0,y:int=0,*args,z:int=0,**kwargs) ->int:
    '''
    this is a function for add
    x: int
    y: int
    return: int
    '''
    return x + y

print(add(4,5))
print(add('a','b'))
print(add())
print(add.__annotations__)

print('-'*50)
sig  = inspect.signature(add)
print(sig)

print('-'*50)
print('parameter:',sig.parameters)
print('x:',sig.parameters['x'])
print('z:',sig.parameters['z'].annotation)    #参数注解
print('z:',sig.parameters['z'].name)   #参数名字
print('z:',sig.parameters['z'].default)  #参数默认值

print('-'*50)
print('z:',sig.parameters['z'].kind)   #参数类型
print('x:',sig.parameters['x'].kind)
print('args:',sig.parameters['args'].kind)
print('kwargs:',sig.parameters['kwargs'].kind)

print('-'*50)
print('args:',sig.parameters['args'].annotation)   #可变类型注解为空
print('return:',sig.return_annotation)

运行结果:

9
ab
0
{'return': <class 'int'>, 'y': <class 'int'>, 'z': <class 'int'>, 'x': <class 'int'>}
--------------------------------------------------
(x:int=0, y:int=0, *args, z:int=0, **kwargs) -> int
--------------------------------------------------
parameter: OrderedDict([('x', <Parameter "x:int=0">), ('y', <Parameter "y:int=0">), ('args', <Parameter "*args">), ('z', <Parameter "z:int=0">), ('kwargs', <Parameter "**kwargs">)])
x: x:int=0
z: <class 'int'>
z: z
z: 0
--------------------------------------------------
z: KEYWORD_ONLY
x: POSITIONAL_OR_KEYWORD
args: VAR_POSITIONAL
kwargs: VAR_KEYWORD
--------------------------------------------------
args: <class 'inspect._empty'>
return: <class 'int'>

继续查看元素:

for i,item in enumerate(sig.parameters.items()):
    k,v = item
    print(i,item)
    print(i,k,v)

运行结果:

0 ('x', <Parameter "x:int=0">)
0 x x:int=0
1 ('y', <Parameter "y:int=0">)
1 y y:int=0
2 ('args', <Parameter "*args">)
2 args *args
3 ('z', <Parameter "z:int=0">)
3 z z:int=0
4 ('kwargs', <Parameter "**kwargs">)
4 kwargs **kwargs

inspect稽核函数的使用:

import inspect
import functools


def add1():
    pass
    
class add2():
    @classmethod
    def count():
        pass
    
def add3(x):
    for i in range(5):
        yield x+i
        
add4 = add3(3)

print(1,inspect.isfunction(add1))
print(2,inspect.isclass(add2))
print(3,inspect.ismethod(add2.count))
print(4,inspect.isgeneratorfunction(add3))
print(5,inspect.isgenerator(add4))
print(6,inspect.ismodule(functools))
print(7,inspect.isbuiltin(print))

运行结果:

1 True
2 True
3 True
4 True
5 True
6 True
7 True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值