闭包与装饰器、装饰器工厂的联系与区别

闭包、装饰器、装饰器工厂的关系

闭包

闭包是两个函数的嵌套,外部函数返回内部函数的引用,外部函数一定有参数

装饰器

装饰器是特殊的闭包,其参数是一个函数,形成一个闭包就是装饰器了。装饰器的返回值也是一个函数对象

装饰器工厂

装饰器工厂就是有参数的装饰器

注意

只要函数声明使用了装饰器,就会自动执行装饰器的内容,只不过没有执行装饰器内部的函数,只有调用被装饰的函数时,才会执行装饰器内部的函数。

语法糖和@符号

在用装饰器去装饰某个函数的时候,@符号是装饰器的语法糖,在定义函数的时候使用,避免再一次赋值操作。

未使用语法糖的代码

def decoratied(func):
    def inner(*args,**kwargs):
        return func(*args,**kwargs)
    return inner
    
def f1(a,b):
    return f"执行结果为{a+b}"

print("未加语法糖的结果",decoratied(f1)(3,4))

运行结果为:
在这里插入图片描述

使用@语法糖的代码

def decoratied(func):
    def inner(*args,**kwargs):
        return func(*args,**kwargs)
    return inner

@decoratied
def f1(a,b):
    return f"执行结果为{a+b}"

print("使用语法糖的结果为:",f1(3,4))

在这里插入图片描述

装饰器与闭包

装饰器

闭包

装饰器的执行顺序/原理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值