【Python】1.nonlocal 关键字、测试LEGB

本文详细介绍了Python中nonlocal和global关键字的用法,通过示例展示了它们如何影响变量的作用域。同时,探讨了Python的LEGB作用域规则,以帮助理解变量查找过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#nonlocal

用来声明外层的局部变量。

#global

用来声明全局变量。

#测试nonlocal,global关键字的用法
a = 100

def outer():
    b = 10

    def inner():
        nonlocal b       #声明外部函数的局部变量
        print("inner:",b)
        b = 20
    inner()
    print("outer:",b)
    global a            #声明全局变量
    a = 1000
    print("inner:",a)


outer()
结果:nonlocal改变的外部函数outer中b的值。
inner: 10
outer: 20
inner: 1000

Process finished with exit code 0

#测试LEGB

Python 在查找“名称”时,是按照 LEGB 规则查找的:
Local-->Enclosed-->Global-->Built in
Local         指的就是函数或者类的方法内部
Enclosed        指的是嵌套函数(一个函数包裹另一个函数,闭包)
Global         指的是模块中的全局变量
Built in        指的是 Python为自己保留的特殊名称。
# str = "global str"
def outer():
    # str = "outer"
    def inner():
        str = "inner"    #定义在函数内部的str
        print(str)

    inner()

outer()

输出: inner

str = "global str"
def outer():
   #  str = "outer"
    def inner():
       # str = "inner"
        print(str)

    inner()

outer()

输出:global str

# str = "global str"
def outer():
    # str = "outer"
    def inner():
       # str = "inner"
        print(str)

    inner()

outer()

分析:现在函数内部、嵌套函数内及全局变量中均不含str,则找python自身的保留字str

输出:

<class 'str'>

Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值