【发布时间】:2011-07-24 21:17:02
【问题描述】:
我正在尝试对 Python 3 源代码中的范围进行一些分析,但我对 nonlocal 语句在类定义中的工作方式感到困惑。
据我了解,类定义在新命名空间内执行其主体(称为 dict),并将类名绑定到 type(name, bases, dict) 的结果。只要非本地 x 引用绑定在封闭非本地范围内某处的变量,它就应该工作。
据此,我希望以下代码能够编译并运行:
class A:
v = 1
class B:
nonlocal v
v = 2
但这失败了
SyntaxError: no binding for nonlocal 'v' found
而下面的代码运行完美
def A():
v = 1
class B:
nonlocal v
v = 2
谁能解释一下函数定义的闭包和类定义的区别?
【问题讨论】:
-
更多研究 - 在最后一个代码示例中,A 中的 locals() 是 {v:1},而 B 中是 {v:2, '
__module__':'__main__' , '__locals__':{...}}
标签: python class python-3.x python-nonlocal