Python scope, dictionary and variables difference?
Python镜我有同样的问题,但略有不同。
1 2 3 | number = 0 def incrementNumber(): number += 1 |
上面这个不起作用,下面这个为什么?两者都在功能范围之外。
1 2 3 | number = {'num':0} def incrementNumber(): number['num'] += 1 |
如果我将变量作为全局变量添加,第一个变量就可以工作。
1 2 3 4 | number = 0 def incrementNumber(): global number number += 1 |
看看这篇博文,它和你正在做的相似。特别是亚当的评论。
You don't assign to dictionaryVar, you assign to dictionaryVar['A'].
So it's never being assigned to, so it's implicitly global. If you
were to actually assign to dictionaryVar, you'd get the behavior you
were"expecting".
在第一种情况下,
在字典的情况下,它是可变的,您获取向上范围引用,然后改变底层对象,这样您的添加就传播出了函数。
在最后一种情况下,您已经明确地告诉python不要将数字设置为局部变量,因此更改将按您的需要传播出去。
相关的python闭包局部变量