Python 中的装饰器

本文深入探讨了Python装饰器的工作原理,解释了装饰器如何在模块加载时立即执行,并通过实例展示了装饰器如何修改和替换函数。理解装饰器有助于提升Python编程技能。

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

装饰器是可调用的对象,其参数是另一个函数(被装饰的函数)。装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用对象。

严格的说,装饰器只是语法糖。装饰器可以像常规的可调用对象那样调用,其参数是另一个函数。

装饰的两大特性:1.能把被装饰的函数替换成其他函数。2.装饰器在加载模块时立即执行。

# BEGIN REGISTRATION

registry = []  # <1>

def register(func):  # <2>
    print('running register(%s)' % func)  # <3>
    registry.append(func)  # <4>
    return func  # <5>

@register  # <6>
def f1():
    print('running f1()')

@register
def f2():
    print('running f2()')

def f3():  # <7>
    print('running f3()')

def main():  # <8>
    print('running main()')
    print('registry ->', registry)
    f1()
    f2()
    f3()

if __name__=='__main__':
    main()  # <9>

# END REGISTRATION
running register(<function f1 at 0x00000000024D8EA0>)
running register(<function f2 at 0x00000000024FD268>)
running main()
registry -> [<function f1 at 0x00000000024D8EA0>, <function f2 at 0x00000000024FD268>]
running f1()
running f2()
running f3()

前两行,在导入装饰器时已执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值