Python 命名空间及作用域-随记

Python 的查找顺序为:局部的命名空间去 -> 全局命名空间 -> 内置命名空间

作用域就是一个 Python 程序可以直接访问命名空间的正文区域。直接访问一个变量,会从内到外依次访问所有的作用域直到找到,否则会报未定义的错误。

一个变量在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域


a1 = '全局变量a'
b1 = 10
def print1():
    global b1    # 此处需要修改b1则申明为全局变量,外部函数不能用nonlocal
    b1=b1+1
    print(b1)
    print(a1)
    b = '爷闭包函数外变量b'
    print(b)
    def print2():
        c = '父闭包函数变量c'
        print('父函数打印-C: ',c)
        def print3():
            global d    # global全局变量标识
            d = '孙闭包函数变量d,申明为全局变量'
            print(d)
            nonlocal c   # 局部作用域内的变量,修改上层变量,需 nonlocal 申明,及C为局部作用域的变量
            c='孙函数修改父函数变量c'
            print("孙函数打印-C: ",c)
        print3()
    print2()
print1()
print('外部打印全局变量d:', d)
11
全局变量a
爷闭包函数外变量b
父函数打印-C:  父闭包函数变量c
孙闭包函数变量d,申明为全局变量
孙函数打印-C:  孙函数修改父函数变量c
外部打印全局变量d: 孙闭包函数变量d,申明为全局变量

Process finished with exit code 0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值