我正在尝试对 Python 3 源代码中的范围进行一些分析,但我对非本地语句语句在类定义中的工作方式感到困惑。
据我了解,类定义在一个新的命名空间内执行它的主体(称为dict)并将类名绑定到类型(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
谁能在这里解释函数定义的闭包和类定义之间的区别?