Python范围规则到底是什么?
如果我有一些代码:
code1 class Foo: code2 def spam..... code3 for code4..: code5 x()
在哪里x找到?一些可能的选择包括以下列表:
x
当函数spam传递到其他地方时,执行期间还会有上下文。也许lambda函数传递的方式有所不同?
spam
某个地方必须有一个简单的参考或算法。对于中级Python程序员而言,这是一个令人困惑的。
实际上,这是学习Python的第3条关于Python范围解析的简明规则。埃德 。(这些规则特定于变量名,而不是属性。如果不加句点引用,则适用这些规则。)
L ocal —在函数(def或lambda)中以任何方式分配的名称,但未在该函数中声明为全局
def
lambda
E nclosing-function —在任何和所有静态封装函数(def或lambda)的本地范围内从内部到外部分配的名称
Global (module) -在模块文件的顶层分配名称,或通过执行global在声明def文件中
global
Built-in (Python)-的名称在内置模块的名称预先分配的open,range,SyntaxError,等
open
range
SyntaxError
因此,在
code1 class Foo: code2 def spam(): code3 for code4: code5 x()
该for循环中没有自己的名字空间。按照LEGB顺序,范围为
x永远不会被发现code2