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 ...
随机推荐
- 动态下载苹果系统提供的多种中文字体(适合对字体有较多需求的应用比如阅读类的app)
链接:https://developer.apple.com/library/ios/samplecode/DownloadFont/Listings/DownloadFont_ViewControl ...
- 记一次w3wp占用CPU过高的解决过程(Dictionary和线程安全)
项目上线以来一直存在一个比较揪心的问题,和一个没有信心处理的BUG,那就是在应用程序启动时有可能会导致cpu跑满99%或持续在一个值如50%左右,这样一来对服务器的压力是非常大的,经常出现服务器无法远 ...
- Android杂谈--Activity、Window、View的关系
转自 http://www.cnblogs.com/loulijun/archive/2012/02/09/2344681.html Activity其实更像一个控制单元,控制window上显示的Vi ...
- 获取url据对路径写法
var _absUrl = (function () { var a; return function (url) { if (!a) a = document.createElement('a'); ...
- 最简单的 Web Service 入门 (看了包会)
原理:WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于SOAP协议的网络应用间的交互. 作用:主要 ...
- 温故知新---重读C#InDepth(一)
一本好书,或是一本比较有深度的书,就是每次研读的时候都会有新的发现. 好吧,我承认每次读的时候都有泛泛而过的嫌疑~~ 这几年一直专注于C#客户端的开发,逐步从迷迷糊糊,到一知半解,再到自以为是,最后沉 ...
- ipvsadm参数详解(常用命令)
[root@localhost ipvsadm]# ipvsadm -h ipvsadm v1.24 2005/12/10 (compiled with popt and IPVS v1.2.1) U ...
- 每天一个linux命令(37):free 命令
free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之一. 1.命令格式: free [参 ...
- 利用less监视模式实时预览样式刷新浏览器
[前言]此处介绍的方法只是我个人的用法,相信大家有更好更简洁的方式. 上次写到利用LiveReload解放F5.而且LiveReload可以编辑sass/less/stylus.但是可惜发现LiveR ...
- python 切片
本人的博客中的python内容基本上全是看着廖雪峰大神博客做的一个笔记 关于列表或者元祖的切片 下面说一下列表的切片的语法: L[起始位置:结束位置:步长] number = range(100) n ...