python之装饰器,多重装饰器,多层函数装饰器

本文详细介绍了Python装饰器的概念,包括装饰器如何利用闭包特性,以及如何实现多重和多层函数装饰器。通过实例解析了装饰器的执行顺序,强调了装饰器在代码复用和功能增强上的作用。
摘要由CSDN通过智能技术生成

理解装饰器之前先要理解闭包

  • 闭包

    定义:在一个函数内部的函数,同时内部函数又引用了外部函数的变量。
    本质:闭包是将内部函数和外部函数的执行环境绑定在一起的对象。
    优点:内部函数可以使用外部变量。
    缺点:外部变量一直存在于内存中,不会在调用结束后释放,占用内存。
    作用:实现python装饰器。

  • 闭包三要素:

    – 必须有一个内嵌函数。
    – 内嵌函数必须引用外部函数中变量。
    – 外部函数返回值必须是内嵌函数。

  • 闭包函数的调用方式:

    变量 = 外部函数名(参数)
    变量(参数)

  • 函数名变量存储着函数内存地址

    def test():
    	print("这是test函数")
    
    print(test) # <function test at 0x000001D2BE18C1E0>
    test() # 这是test函数
    

伪代码示例:

def 外部函数名(参数):
	外部变量
 	def 内部函数名(参数):
 		使用外部变量
 	# 仅返回内部函数名(内部函数的内存地址)
 	return 内部函数名

代码示例:

def test(name: str):
    age = 18

    def my_test():
        print("name:", name)
        print("age:", age)

    # 仅返回内部函数名(内部函数的内存地址)
    return my_test

print(test) # test函数的内存地址
print(test(name="test")) # test函数内部函数my_test 函数的内存地址
result = test(name="test") # 使用变量接收test 函数返回的 my_test函数内存地址
result() # 相当于 my_test()

装饰器

而装饰器decorators,正式利用了闭包的特性

  • 定义

    在不改变原函数的调用以及内部代码情况下,为其添加新功能的函数。

  • 伪代码示例

    def 函数装饰器名称(func):
    	需要添加的新功能
    	def 内嵌函数名(*args, **kwargs):
    		需要添加的新功能
    		return func(*args, **kwargs)
    	return 内嵌函数名
    
  • 装饰器的使用
    使用@符号,直接在函数上方添加装饰器

    @函数装饰器名称
    想要装饰的函数()
    
  • 本质:

    使用“@函数装饰器名称”修饰原函数,等同于创建与原函数名称相同的变量,关联内嵌函数;故调用原函数时执行内嵌函数。

    原函数名称 = 函数装饰器名称(原函数名称)

  • 代码示例

    • 定义两个普通函数,实现打招呼,与说再见功能
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值