如何用 python 写出像 javascript 这样的闭包?
var foo = function(n){
var count = n;
function bar(){
n = count
count+=1;
return n
}
return bar
}
>>>p = foo(10)
>>>p()
10
>>>p()
11
>>>p()
12
python 由于作用域的关系,函数内可以访问函数外部环境变量的值。但是不能对这个外部的环境变量进行操作。
好像 python 的闭包不是这么用的?
两个函数之间共享一个变量最方便的还是在一个 class 中用 self ?
def func(data):
count = data
def wrap():
count += 1
return count
return wrap
>>>p = func(10)
>>>p()
UnboundLocalError: local variable 'count' referenced before assignment
#但是不是赋值,而是用一个数组保存数组,就可以
def func(data):
count = [data]
def wrap():
count[0] += 1
return count[0]
return wrap
>>>p = func(10)
>>>p()
11
>>p()
12
>>p()
13
谁能具体解释一下这个的原因?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
有
yield
嘻嘻这是因为
int
是不可变的,你对它+= 1,它会构建出一个新的加了1的int
,而count
指向的那个int
是没有变的,这对所有的不可变对象都是一样的道理。而list
是可变的,就是说你可以不用改变count
的指向就可以改变count
的内容。至于为什么会有
UnboundLocalError
,参见这个官方faq。使用 global 关键字