Python-闭包、装饰器--Python笔记6

Python-闭包、装饰器--Python笔记6,第1张

概述闭包闭包存在的意义就是保证数据的安全闭包只能存在于嵌套函数中内层函数对外层函数非全局变量的引用,就会产生闭包现象,被引用的非全局变量也称自由变量,这个自由变量会与内层函数产生一种绑定关系。自由变量不会在内存中消失。闭包的作用:保证数据的安全。闭包的注意事项:自由 闭包

闭包存在的意义就是 保证数据的安全

闭包只能存在于嵌套函数中

内层函数对外层函数非全局变量的引用,就会产生闭包现象,被引用的非全局变量也称自由变量,这个自由变量会与内层函数产生一种绑定关系。

自由变量不会在内存中消失。

闭包的作用:保证数据的安全。

闭包的注意事项:自由变量不会被自动回收,消耗内存。

# 求累计平均数def make_averager():    lis = []  # 外层非全局变量    def averager(num):  # 内层函数        lis.append(num)  # 内层函数对外层函数非全局变量的引用  这样就产生了闭包现象。        return sum(lis) / len(lis)      return averageravg = make_averager()print(avg(1000))  # 1000print(avg(500))  # 750print(avg(1000))  #833.3333333333334
装饰

遵循 开放封闭原则

开放:对代码的拓展开放;

封闭:对源码的修改是封闭的;

在不改变原函数代码以及调用方式的前提下,为其添加新的功能。

如下实例,需求:在不改变 func1 函数调用方式及原代码的情况下;

使调用 func1 的打印结果为;

run

this is func1

end

def func1():    print("this is func1")    def wrapper(func):    def inner():        print("run")        func()        print("end")    return inner        func1 = wrapper(func1)func1()

装饰器就是 重新定义一个函数,在这个函数里面调用原函数, 可以在调用原函数之前或者之后添加代码,最后将重新定义的函数名称替换成原函数名称。

入上图中的 7 8 9 分别是在原函数之前添加代码、调用原函数、在原函数后面添加代码。 上图中第 4 就是将 func1 这个变量指向到 wrapper函数,而wrapper 函数又将 内层函数inner 返回给 func1 ,所以此时调用 func1 就相当于调用 inner 函数。

小结:重新定义一个函数在这个函数里面调用原函数将重新定义的函数名称替换成原函数名称

理解了上面的装饰器就来看下面的简化版本

上图中 @wrapper 这句代码就是将 func1 函数作为实参传递给 wrapper , 同时 将func1 指向到 wrapper 函数,所以我们调用 func1 函数就相当于调用 wrapper函数。

总结:

闭包:

闭包存在的意义就是 保证数据的安全闭包只能存在于嵌套函数中内层函数对外层函数非全局变量的引用,就会产生闭包现象,被引用的非全局变量也称自由变量,这个自由变量会与内层函数产生一种绑定关系。自由变量不会在内存中消失。

装饰器

在不改变原函数代码以及调用方式的前提下,为其添加新的功能。装饰器必须定义在被装饰函数的上方 总结

以上是内存溢出为你收集整理的Python-闭包、装饰器--Python笔记6全部内容,希望文章能够帮你解决Python-闭包、装饰器--Python笔记6所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1186453.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存