来自python doc的本地/全局/自由变量定义:
如果名称绑定在块中,则它是该块的局部变量,除非声明为非局部变量。如果名称绑定在模块级别,则它是一个全局变量。(模块代码块的变量是局部的和全局的。)如果一个变量在一个代码块中使用但没有在那里定义,它是一个自由变量。
代码 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()
,而不是在类块中。
in Code 1
,x
是一个全局变量,它被使用但未在foo()
.
但是它不是一个自由变量,因为它不是由locals()
.
我认为这不是医生所说的。自由变量有技术定义吗?