python:LEGB标识符解析顺序

本文深入讲解了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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值