------------------

首先根据实例, 体会一下闭包的效果

------------------

定义闭包:

def foo(x):

a = [0]

def bar(y):

a[0] = a[0]*x + y

print(a[0])

return a[0]

return bar

使用闭包

f=foo(1)

f(2) #print 2

f(2) #print 4

f(2) #print 6

------------------

闭包要达到的目的

------------------

普通函数, 输入给定后, 输出总是一定的, 比如add(1,2), 无论调用多少次, 结果永远是3。

闭包则不同, 在函数在执行后, 有能力保持函数执行后的环境, 为下次闭包的执行营造一个新的环境.

典型的为了闭包而闭包的情形有:

1. 看起来像闭包, 实际上并不具持久化的代码,.

2. 看起来像闭包, 实际上却使用了global变量来支持持久化.

------------------

闭包的意义

------------------

一句话,类是包含行为的数据,闭包是有数据的行为。一般情况下,我们完全可以使用全局变量+函数来实现持久化,或者写个类,可读性比闭包好多了。

闭包的作用, 摘自http://www.gracecode.com/posts/2385.html

setTimeout/setInterval

回调函数(callback)

事件句柄(event handle)

------------------

闭包模板

------------------

##闭包的定义模板

def foo(x):

a = [0]                 #声明一个local变量来支持持久化, 因为python2不支持nonlocal, 所以这里用了list, 而不是a=0

def bar(y):

a[0] = a[0]*x + y   #修改local变量的值, 因为python2不支持nonlocal, 所以赋值给了a[0]而不是a

print(a[0])

return a[0]         #内部函数一定要返回持久化变量, 这里可返回a[0]或a

return bar              #外部函数一定是返回内部函数

##闭包的使用模板

f=foo(1)  #定义一个闭包, 就像实例化一个类一样, 参数要符合外部函数签名

f(2)      #执行闭包, 就像调用某个函数一样, 参数要符合内部函数签名

 

python闭包小例子的更多相关文章

  1. 一段关于python 闭包的例子

    >>> def counter(a=0): ... count = a ... def incr(): ... b = 1 + count ... return b ... retu ...

  2. 感受python之美,python简单易懂的小例子

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 1 简洁之美 通过一行代码,体会Python语言简洁之美 2 Python ...

  3. python ctypes小例子

    import time import ctypes import ctypes.wintypes SEE_MASK_NOCLOSEPROCESS = 0x00000040 SEE_MASK_INVOK ...

  4. [Python]Python 函数调用小例子

    函数定义: In [78]: def printme(str): ....: print str ....: return ....: 调用: In [79]: printme('This is Ji ...

  5. python subprocess 小例子

    #服务端import socketimport osimport subprocessphone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ...

  6. 高逼格利器之Python闭包与装饰器

    生活在魔都的小明,终于攒够了首付,在魔都郊区买了一套房子:有一天,小明踩了狗屎,中了一注彩票,得到了20w,小明很是欢喜,于是想干脆用这20万来装修房子吧(decoration): 整个装修过程,小明 ...

  7. [Spark][Hive][Python][SQL]Spark 读取Hive表的小例子

    [Spark][Hive][Python][SQL]Spark 读取Hive表的小例子$ cat customers.txt 1 Ali us 2 Bsb ca 3 Carls mx $ hive h ...

  8. [Python]Python 使用 for 循环的小例子

    [Python]Python 使用 for 循环的小例子: In [7]: for i in range(5): ...: print "xxxx" ...: print &quo ...

  9. [python]python 遍历一个list 的小例子:

    [python]python 遍历一个list 的小例子: mlist=["aaa","bbb","ccc"]for ss in enume ...

随机推荐

  1. iOS——浅谈iOS中三种生成随机数方法

    ios 有如下三种随机数方法:

  2. 20145312 GDB调试汇编堆栈过程分析

    20145312 GDB调试汇编堆栈过程分析 参考资料 卢肖明同学的博客:<GDB调试汇编堆栈过程分析>: http://www.cnblogs.com/lxm20145215----/p ...

  3. split 方法的正确使用姿势

    本文同步自我的个人博客:http://www.52cik.com/2015/11/02/split-skill.html 通过js获取 QueryString (location.search部分) ...

  4. 启动tomcat报错 Could not reserve enough space for object heap的解决办法

    问题:打开eclips启动tomcat发现报出Could not reserve enough space for object heap错误. 解决办法:1.首先检查tomcat是否能正常启动.re ...

  5. JavaScript基础---语言基础(1)

    写在前面: 通过四篇博客把JS基础中的基础整理一下,方便自己查阅,这些内容对于实际项目开发中也许并不会在意,但是作为JS的语言基础,自觉还是应该熟悉.在完成这三篇博客(JavaScript基础---语 ...

  6. 由DataGridTextColumn不能获取到父级DataContext引发的思考

    在项目中使用DataGrid需要根据业务动态隐藏某些列,思路都是给DataGrid中列的Visibility属性绑定值来实现(项目使用MVVM),如下 <DataGridTextColumn H ...

  7. 关于软工项目beta版本

    项目总结 项目成员: 黄丰润 031302307 王旭銮 031302320 张家俊 031302329 张晓燕 031302343 项目完成度:实现了专业信息填写.查看,教师信息填写,报课和查看课表 ...

  8. zabbix 乱码的问题

    文章转自:http://www.ttlsa.com/zabbix/zabbix-chinese-garbled-ttlsa/ 在使用zabbix的时候发现图片下方的中文都是一个个小方格 这是zabbi ...

  9. Java 并发编程 Executor

    Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,Completion ...

  10. BZOJ solve 100 纪念

    按照xiaoyimi立下的flag是不是该去表白啦--可惜并没有妹子