python变量范围LEGB规则

时间:2018-05-23 17:17:32

标签: python

def fun():
    print b

def pass_a(b):
    fun()

pass_a(2) raise: NameError: global name 'b' is not defined.

根据LEGB规则,我想找到b,python会上堆栈帧,并在封闭范围内找到b pass_a?请纠正我的理解。 THX。

1 个答案:

答案 0 :(得分:1)

" E nclosing" L E GB中的范围指的是lexically enclosed范围。

在下面的示例中,b是一个可以在封闭范围内找到的名称:

def pass_a(b):
    def fun():
        print(b)
    fun()

在您的示例中,b包含在(不同的)本地范围中,而不是封闭范围。

请参阅PEP 3104 -- Access to Names in Outer Scopes