首先, 说说python里面的闭包吧:
1. 需要函数嵌套, 就是一个函数里面再写一个函数.
2. 外部函数需要返回一个内部函数的引用
3. 外部函数中有一些局部变量, 并且, 这些局部变量在内部函数中有使用
概念:
1. 自由变量: 外部函数中定义的局部变量, 并且在内部函数中被使用.
2. 闭包: 那个使用了自由变量并被返回的内部函数就称为闭包.
一个例子:(来自<python核心编程>)
问题的提出: 关于python闭包的一个问题, 呵呵, 论坛一位网友提出的问题: 自由变量只能是list吗?
上面这一段代码中, 内部函数inf第一句打印了locals(), 最终打印的结果只有a和f, 这段代码我的测试环境是python2.5, windows平台...对于这段, 我总结:
1. 内部函数中, 遇到一个变量, 如果是试图改变它的子元素(集合类型)或自己名称空间(比如函数作为变量或对象作为变量时, 自己同时是名称空间)内部其他名称的引用时, 将会合法的引用到外部变量.
2. 内部函数中, 遇到一个变量, 如果试图直接改变其自身, 多数情况都会得到"使用前未指定"的错误, 请看原因:
最重要的就在a+=1这一句, 这里, python实际上会认为你是在创建一个新的本地变量并为他赋值, 也就是说, python的解释器认为a+=1是a = a + 1, 而此时就很明显了, 本地变量中目前没有a, 所以, 就得到了我们上面说的那个错误...
3. 通常需要在闭包内部去修改外部函数变量的时候, 我们需要借助一些集合类型或有名称空间的对象进行操作.
以上这部分都是python3.0之前的情况, 在3.0之后, 加入了一个新的关键字nonlocal, 就像当初的global关键字解决函数内修改全局变量的问题一样漂亮, nonlocal将闭包内修改外部变量的问题也很优美的搞定了.
上面的代码中, 通过在闭包内, 使用外部变量之前, 用nonlocal去声明一下要在闭包中进行修改的那两个变量不是本地变量, 就OK了, 和global的用法完全一致, 这样, 我们就可以在其后的代码段中, 修改普通的外部变量了.....
分享到:
相关推荐
Python闭包实例closure.py 简单示例闭包的使用 简单示例闭包的使用
python高阶闭包练习题
主要介绍了Python闭包函数定义与用法,结合实例形式分析了Python闭包函数的功能、定义、使用方法及相关操作注意事项,需要的朋友可以参考下
Python闭包可能会在面试或者是工作中经常碰到,而提到Python的延迟绑定,肯定就离不开闭包的理解,今天总结下 关于闭包的概念以及一个延迟绑定的面试题。 Python闭包 1、什么是闭包,闭包必须满足以下3个条件: 必须...
python闭包深入(csdn)————程序
主要介绍了Python闭包实现计数器的方法,分析了闭包的概念及实现计数器的相关技巧,需要的朋友可以参考下
python 闭包和装饰器(csdn)————程序
python闭包 关于闭包, 很多blog中都这样解释 :对于一个嵌套定义的函数,外层的函数的返回值是内层函数,而在内层函数中又引用了外层函数的局部变量,在外层函数执行后,其局部变量并非被回收,而会同返回的内层...
本文实例讲述了Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作。分享给大家供大家参考,具体如下: 实例对象也可以实现闭包的功能,不过实例对象消耗的资源(内存)比闭包多。 demo.py(闭包): # 闭包,...
什么是闭包?如何设置闭包?创建闭包可以用来干什么?闭包的好处,如何正确使用闭包?通过闭包能创建一些只有当前函数能访问的变量,
关于Python作用域的知识在python作用域有相应的笔记,这个笔记是关于Python闭包及其作用域的详细的笔记 如果在一个内部函数里,对一个外部作用域(但不是全局作用域)的变量进行引用,那么内部函数就被称为闭包...
python通过本文的介绍,你应该对Python中的闭包有了更深入的理解,并能够开始探索如何在你的项目中应用这一特性。掌握闭包的使用,可以帮助你编写出更加强大和灵活的程序。
Python 闭包开发注意事项!关于两个在开发过程中的需要注意的问题。
作业_python生成器&闭包函数&装饰器.txt 类装饰器&反射 源码
闭包可以让使用者访问到函数内部的数据,也就是可以拿到在闭包内所提供的隐藏数据。如果某个功能只需要一个函数,可以使用闭包而不需另创建一个类。第一次将参数传入并 保