关于闭包即双层装饰器的理解

** 闭包**:就是一个概念,出现在嵌套函数中,指的是内层函数引用到了外层函数的**自由变量**(未在本地作用域中定义的局部变量),就形成了闭包。

函数的局部作用域是不能够保存信息的,即在函数内部声明变量在函数调用结束之后函数里面保存的信息就被销毁了,包括函数的参数。而这时使用闭包的话就能发挥作用:
**保存函数的状态信息,使函数的局部变量信息依然可以保存下来**。形成闭包之后,闭包变量能够随着闭包函数的调用而实时更新,就好像是一个全局变量那样。

我们发现每次再运行该函数,里面的count变量其实已然保存。如果你希望函数的每次执行结果,都是基于这个函数上次的运行结果。
通过以上简单的代码就很明了了闭包的好处之一。
另一个好处:闭包可以根据外部作用域的局部变量来得到不同的结果,这有点像一种类似配置功能的作用,我们可以修改外部的变量,闭包根据这个变量展现出不同的功能。这点在装饰器中得到大量运用。

**多层装饰器**的运行套用都是从下套上,一层套一层,具体看一下代码就明晓。

两层装饰器能很好的完成注册,方便构成架子写进不同函数:

原文地址:http://blog.51cto.com/13929187/2169162

时间: 2024-11-05 22:43:21

关于闭包即双层装饰器的理解的相关文章

python闭包和装饰器的理解

闭包: 两个函数的嵌套,外部函数返回内部函数的引?,外部函数?定有参数 def 外部函数(参数): def 内部函数(): pass return 内部函数 他跟函数之间的区别: 1.格式两个函数嵌套 2.闭包外部函数的参数可以在内存中保持 装饰器是什么:闭包加@xxx 装饰器的作?:在不改变原先的函数值跟调?的?式,添加额外的功能 装饰器的代码: def set_fun(func): def call_fun(*args,**kwargs): return func(*args,**kwarg

python-学习笔记之-Day5 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化

1.双层装饰器 #!/usr/bin/env python # -*- coding: utf-8 -*- # author:zml LOGIN_INFO = False IS_ADMIN = False   def check_log(func): def inner(): res = func() if LOGIN_INFO: print('验证成功!') return res else: print('验证失败!') return inner   def check_admin(func)

模块调用,datetime,time,logging,递归,双层装饰器, json,pickle迭代器和生成器

一.python模块(导入,内置,自定义,开源) 1.模块简介 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,以使用该模块中的函数等功能.这也是使用python标准库的方法. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块. 2.模块的引入 在Python中用关键字

Day5 双层装饰器、字符串格式化

双层装饰器实现用户登录和权限认证 #!/usr/bin/env python# -*- coding: utf-8 -*-# Author: WangHuafeng USER_INFO = {} def check_login(func): def inner(*args, **kwargs): #.get拿数据时,不存在则默认为None if USER_INFO.get('is_login', None): ret = func(*args, **kwargs) return ret else

python之我对装饰器的理解

从一开始学习python的时候,就一直不是很理解装饰器是个什么东东,再看了很多篇博文和自己动手敲了好多代码后,算是略有了解. 我理解的装饰器是: 在不改变原有函数调用的情况下,对其进行包装,使其变成另外一种函数来使用,一般的用途是 插入日志.性能测试.事务处理等. def host_restrict(tags=[], names=[]):     def decorator(f):         @functools.wraps(f)         def decorated(*args, 

python 双层装饰器、格式化、模块、迭代器和生成器

一.双层装饰器 一.双层装饰器 #!/usr/bin/env python # -*- coding:utf-8 -*- USER_INFO={} #USER_INFO['is_login'] = True #USER_INFO['user_type'] = 2 def check_login(func): def inner(*args ,**kwargs): if USER_INFO.get('is_login',None): ret = func(*args,**kwargs) retur

[Python] 对 Python 装饰器的理解的一些心得分享出来给大家参考

最近写一个py脚本来整理电脑中的文档,其中需要检校输入的字符,为了不使代码冗长,想到使用装饰器. 上网搜索有关python的装饰器学习文档,主要看的是AstralWind的一篇博文,以及Limodou的一篇文章.作为初学者,这两篇文章对新手有很大的帮助,但仍然有些不易理解的地方.因此在此以一个初学者的认知记录一下python的装饰器的学习心得. 1. 什么是装饰器? 顾名思义,装饰器就是在方法上方标一个带有@符号的方法名,以此来对被装饰的方法进行点缀改造. 当你明白什么是装饰器之后,自然会觉得这

python入门(六)装饰器的理解

装饰器用于拓展原有函数功能的一种函数比如: def helloWorld(fun) def out() print ("======start========") fun() print ("=====end======") return out @helloWorld def back () print ("let's go") back() 运行结果: ======start======== let's go =====end====== b

转发对python装饰器的理解

[Python] 对 Python 装饰器的理解的一些心得分享出来给大家参考 原文  http://blog.csdn.net/sxw3718401/article/details/39519587 主题 Python 最近写一个py脚本来整理电脑中的文档,其中需要检校输入的字符,为了不使代码冗长,想到使用装饰器. 上网搜索有关python的装饰器学习文档,主要看的是 AstralWind的一篇博文,以及Limodou的一篇文章.作为初学者,这两篇文章对新手有很大的帮助,但仍然有些不易理解的地方