从Python文档中获取的 局部/全局/自由变量 的定义:
如果一个名称在一个代码块内被绑定,它是该代码块的局部变量,除非已声明为非本地变量。如果一个名称在模块级别被绑定,它是一个全局变量。(模块代码块的变量是局部和全局的。) 如果一个变量在代码块中被使用但在其中没有定义,则它是一个自由变量。
代码1:
>>> x = 0
>>> def foo():
... print(x)
... print(locals())
...
>>> foo()
0
{}
代码2:
>>> def bar():
... x = 1
... def foo():
... print(x)
... print(locals())
... foo()
...
>>> bar()
1
{'x':1}
自由变量是在函数块中调用locals()
时返回的,但在类块中不会返回。
在Code 1
中,x
是一个全局变量,它被使用但未在foo()
中定义。
然而它不是一个自由变量,因为它没有被locals()
返回。
我认为这不是文档所说的。是否有一个技术上的自由变量定义?