您的位置:首页 > 编程语言 > Python开发

Python闭包

2016-04-25 12:20 633 查看
内部函数可以看做一个闭包。闭包是一个可以由另一个函数动态生成的函数,并且可以改变和存储函数外创建的变量的值。
下面的例子可以看出闭包的特点:
* inner2()直接使用外部的saying参数,而不是通过另外一个参数获取;
* knights2()返回值为inner2函数,而不是调用它。
def knights2(saying):
def inner2():
return "We are the knights who say: '%s'" % saying
return inner2
inner2()函数可以得到saying参数的值并且记录下来。 return inner2这一行返回的是inner2函数的复制(没有直接调用)。所以它就是一个闭包:一个被动态创建的可以记录外部变量的函数。
#用不同的参数调用knighets2()两次:
>>> a = knights2('Duck')
>>> b = knights2('Hasenpfeffer')
#那么a和b会是什么类型?
>>> type(a)
<class 'function'>
>>> type(b)
<class 'function'>
#它们是函数,同时也是闭包:
>>> a
<function knights2.<locals>.inner2 at 0x10193e158>
>>> b
<function knights.<locals>.inner2 at 0x10193e1e0>
#如果调用它们,会记录被knights2函数创建时的外部变量saying:
>>> a()
"We are the knights who say: 'Duck'"
>>> b()
"We are the knights who say: 'Hasenpfeffer'"
摘抄自《Python语言及其应用》4.7.9闭包
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Python 闭包