Python嵌套函数中的变量作用域
我在学习装饰器的时候,发现了一些奇怪的事情:
def f():
... msg='aa'
... def a():
... print msg
... msg='bb'
... def b():
... print msg
... return a,b
...
>>> a,b = f()
>>> a()
bb
>>> b()
bb
>>>
为什么 a() 返回的是 'bb' 而不是 'aa' 呢?
2 个回答
1
a
和b
都可以访问外部的范围,也就是函数f
的本地范围。当你改变msg
的值时,后面再调用a
或b
时,它们会读取到新的值。
3
因为 a
和 b
在同一个外部作用域里,这个作用域里 msg
被绑定到了 'bb'
。如果你想让它们有各自独立的作用域,就把它们放在不同的函数里。