python 闭包 装饰器 的概念

闭包

在函数中提出的概念
闭包的条件:
1,必须要在外部函数中,定义内部函数,
2,外部函数有返回值,
3,返回的值:内部函数名
4,内部函数引用了外部函数的变量值。

格式

def 外部函数名():
pass
def 内部函数():
pass
return 内部函数

闭包的应用

特点:
1,保存返回闭包的状态。
2,读取其他的元素的内部变量
3,延长了作用域
4,可以引用同级的函数

闭包总结
  1. 闭包优化变量,原来需要类对象完成的工作,闭包也能完成
  2. 由于闭包引用了外部的函数的局部变量,外部函数的局部变量没有及时释放,消耗内存。
  3. 闭包的好处是,代码更加的简洁,便于阅读代码。
  4. 闭包的理解是装饰的基础。
装饰器

列子:

def foo():
    print("foo")
def func():
    print("func")

foo=func
foo()

调用基础平台时,先验证。
要执行开放封闭原则:对以实现的代码不能更改,对扩展代码开放。
装饰器:
##定义装饰器

def decorater(func):
    def wrapper():
        func()
        print("刷漆")
        print("铺地板")
        print("卖家具")
        print("精心装修的房子")
    return wrapper
@decorater
def house():
    print("毛坯房。。。。")

func=house
整个过程等价:
house=decorater(house)
装饰器的功能:
1,引入日志
2,函数执行时间统计
3,执行函数前的预备功能
4,执行后的清理
5,权限校验
6,缓存

装饰器

遵循开放封闭的原则,在不改变原函数的情况下,扩展函数的功能
定义:

def aaa(func):
def xxx([参数]):
。。。。。
func()
。。。
return yyy
return xxx

带参数的装饰器
##定义装饰器
def decorater(func):
    def wrapper(assress):#house 也是wrapper
        func(assress) #表示house
        print("刷漆")
        print("铺地板")
        print("卖家具")
        print("精心装修的房子")
    return wrapper
@decorater
def house(assress):
    print("毛坯房{}。。。。".format(assress))

house("四合院")
  1. 原函数有参数,装饰器的内部也要有参数。
  2. 想要做到任何都能修饰,参数写成:*agrs 和**kwargs
装饰器修饰有返回值的函数。

原函数有返回值,装饰器的内部函数也要有返回值
需要在装饰器中写return语句,表示调用函数,获取函数的返回值并返回。
要与原函数保持一致。

装饰器带有参数

要知道装饰器也能带参数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值