实际上,这是学习Python的第3条关于Python范围解析的简明规则。埃德 。(这些规则特定于变量名,而不是属性。如果不加句点引用,则适用这些规则。)
LEGB规则L ocal —在函数(
def
或lambda
)中以任何方式分配的名称,但未在该函数中声明为全局E nclosing-function —在任何和所有静态封装函数(
def
或lambda
)的本地范围内从内部到外部分配的名称Global (module) -在模块文件的顶层分配名称,或通过执行
global
在声明def
文件中Built-in (Python)-的名称在内置模块的名称预先分配的
open
,range
,SyntaxError
,等
因此,在
pre1class Foo: pre2 def spam(): pre3 for pre4: pre5 x()
该for循环中没有自己的名字空间。按照LEGB顺序,范围为
- L:本地的def spam(在pre3,pre4和pre5)
- E:任何封闭函数(如果整个示例都在另一个示例中def)
- G:x模块中的全局中是否有任何声明pre1?
- B:任何内置x的Python。
x永远不会被发现pre2
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)