作用域和函数嵌套

def scope_test():  # 外函数
    def do_local():  # 内函数1
        spam = "local spam"

    def do_nonlocal():  # 内函数2
        nonlocal spam
        spam = "nonlocal spam"  # 修改局部变量

    def do_global():  # 内函数3
        global spam
        spam = "global spam"  # 修改全局变量

    spam = "test spam"  # 局部变量 spam
    do_local()  # 内函数1执行完后释放空间,不影响外函数的局部变量
    print("After local assignment:", spam)  # 打印 'test spam'
    do_nonlocal()  # 内函数2 nonlocal 申明,内函数2将可以对外函数的局部变量 spam 进行修改
    print("After nonlocal assignment:", spam)  # 打印 'nonlocal spam'
    do_global()  # 内函数3 global 申明,定义一个全局变量 spam = 'global spam'
    print("After global assignment:", spam)  # 在外函数内部,打印和全局变量的同名变量,按LEGB优先级,spam = 'nonlocal spam'


scope_test()
print("In global scope:", spam)  # 这里的 spam 是 global 申明的全局变量

1.在函数外,无法直接调用函数内的局部变量。

2.若要在函数内对全局变量修改,需global申明。

3.在嵌套函数内,内函数要对外函数的局部变量进行修改,需nonlocal申明。

4.在函数内若已经对全局变量进行调用,则后续不能在函数内直接修改该变量。(未global申明)

类似的,嵌套函数中,若内函数已经对外函数的局部变量进行调用,则后续不能在内函数中直接修改该变量。(未nonlocal申明)

ps:当笔记发了,有错的地方还请大佬指出

全部评论

相关推荐

09-29 11:19
门头沟学院 Java
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务