天天看点

python:LEGB标识符解析顺序

"""
LEGB查询规则:
L   locals  局部变量,当前所在命名空间(如函数,模块等)    注意,包括函数的参数(形参)
E   Enclosing Function  闭包空间(外部嵌套函数的命名空间)
G   Globals 全局变量,某个python模块的命名空间
B   Builtins    python内建模块的命名空间
"""
key='Hello'#模块全局


def test():
    print(key)#全局,输出:Hello


def test2(key):
    print(key,end='***')#局部(形参),输出 key参数传入的值
    key=key+str(512)
    print(key)

def test3():
    #print(key)
    """ 这里↑遵循LEGB规则解析标识符key的时候,
    在函数locals中发现了key=1024
    key不再当作全局变量解析,所以打开注释后这里会报错:
    local variable 'key' referenced before assignment
    """
    key=1024#注意和前面的test函数比较
    print(key)


def test4():
    global key
    #若要在模块内的某个函数里面修改模块全局变量,一定要有global关键字
    key=1024



if __name__ == '__main__':
    test()
    test2('hi')
    test3()
    test4()
    test()
           

运行结果:

Hello
hi***hi512
1024
1024

Process finished with exit code 0           

这个问题使用pycharm编程时候,编辑器是可以用高亮给你提示出来的......So,有个好的IDE真实省心省力啊O(∩_∩)O