Python嵌套函数中的变量作用域

0 投票
2 回答
1000 浏览
提问于 2025-04-16 05:28

我在学习装饰器的时候,发现了一些奇怪的事情:

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

ab都可以访问外部的范围,也就是函数f的本地范围。当你改变msg的值时,后面再调用ab时,它们会读取到新的值。

3

因为 ab 在同一个外部作用域里,这个作用域里 msg 被绑定到了 'bb'。如果你想让它们有各自独立的作用域,就把它们放在不同的函数里。

撰写回答