如何在Python中定义自由变量?

10 浏览
0 Comments

如何在Python中定义自由变量?

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()在函数块中调用时,会返回自由变量,但在类块中不会返回。


代码1中,x是一个全局变量,在foo()中被使用但未定义。

然而它不是一个自由变量,因为它没有被locals()返回。

我认为这并不符合文档中的说法。是否有关于自由变量的技术定义?

0