python闭包小例子
------------------
首先根据实例, 体会一下闭包的效果
------------------
定义闭包:
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闭包小例子的更多相关文章
- 一段关于python 闭包的例子
>>> def counter(a=0): ... count = a ... def incr(): ... b = 1 + count ... return b ... retu ...
- 感受python之美,python简单易懂的小例子
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 1 简洁之美 通过一行代码,体会Python语言简洁之美 2 Python ...
- python ctypes小例子
import time import ctypes import ctypes.wintypes SEE_MASK_NOCLOSEPROCESS = 0x00000040 SEE_MASK_INVOK ...
- [Python]Python 函数调用小例子
函数定义: In [78]: def printme(str): ....: print str ....: return ....: 调用: In [79]: printme('This is Ji ...
- python subprocess 小例子
#服务端import socketimport osimport subprocessphone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ...
- 高逼格利器之Python闭包与装饰器
生活在魔都的小明,终于攒够了首付,在魔都郊区买了一套房子:有一天,小明踩了狗屎,中了一注彩票,得到了20w,小明很是欢喜,于是想干脆用这20万来装修房子吧(decoration): 整个装修过程,小明 ...
- [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 ...
- [Python]Python 使用 for 循环的小例子
[Python]Python 使用 for 循环的小例子: In [7]: for i in range(5): ...: print "xxxx" ...: print &quo ...
- [python]python 遍历一个list 的小例子:
[python]python 遍历一个list 的小例子: mlist=["aaa","bbb","ccc"]for ss in enume ...
随机推荐
- iOS——浅谈iOS中三种生成随机数方法
ios 有如下三种随机数方法:
- 20145312 GDB调试汇编堆栈过程分析
20145312 GDB调试汇编堆栈过程分析 参考资料 卢肖明同学的博客:<GDB调试汇编堆栈过程分析>: http://www.cnblogs.com/lxm20145215----/p ...
- split 方法的正确使用姿势
本文同步自我的个人博客:http://www.52cik.com/2015/11/02/split-skill.html 通过js获取 QueryString (location.search部分) ...
- 启动tomcat报错 Could not reserve enough space for object heap的解决办法
问题:打开eclips启动tomcat发现报出Could not reserve enough space for object heap错误. 解决办法:1.首先检查tomcat是否能正常启动.re ...
- JavaScript基础---语言基础(1)
写在前面: 通过四篇博客把JS基础中的基础整理一下,方便自己查阅,这些内容对于实际项目开发中也许并不会在意,但是作为JS的语言基础,自觉还是应该熟悉.在完成这三篇博客(JavaScript基础---语 ...
- 由DataGridTextColumn不能获取到父级DataContext引发的思考
在项目中使用DataGrid需要根据业务动态隐藏某些列,思路都是给DataGrid中列的Visibility属性绑定值来实现(项目使用MVVM),如下 <DataGridTextColumn H ...
- 关于软工项目beta版本
项目总结 项目成员: 黄丰润 031302307 王旭銮 031302320 张家俊 031302329 张晓燕 031302343 项目完成度:实现了专业信息填写.查看,教师信息填写,报课和查看课表 ...
- zabbix 乱码的问题
文章转自:http://www.ttlsa.com/zabbix/zabbix-chinese-garbled-ttlsa/ 在使用zabbix的时候发现图片下方的中文都是一个个小方格 这是zabbi ...
- Java 并发编程 Executor
Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,Completion ...
- BZOJ solve 100 纪念
按照xiaoyimi立下的flag是不是该去表白啦--可惜并没有妹子