Python 作用域规则 到底 是什么?
如果我有一些代码:
code1 class Foo: code2 def spam..... code3 for code4..: code5 x()
在哪里x找到?一些可能的选择包括以下列表:
x
spam当函数被传递到其他地方时,执行期间也有上下文。也许lambda 函数的传递有点不同?
spam
某处必须有一个简单的参考或算法。对于中级 Python 程序员来说,这是一个令人困惑的世界。
实际上,Python Scope 解析的简明规则
LEGB 规则
本地def- 在函数(或)内以任何方式分配的名称lambda,并且未在该函数中声明为全局名称
def
lambda
封闭 函数——在任何和所有静态封闭函数(def或lambda)的局部范围内分配的名称,从内部到外部
全局 (模块)——在模块文件的顶层分配的名称,或通过在文件中执行global语句def
global
内置 (Python) - 在内置名称模块中预分配的名称:open、range、SyntaxError等
open
range
SyntaxError
所以,在
code1 class Foo: code2 def spam(): code3 for code4: code5 x()
for循环没有自己的命名空间。按照 LEGB 顺序,范围将是
for
def spam
code3
code4
code5
code1
x永远不会被发现code2
code2