global nonlocal

a = 10
def func():
    global a  # 修改全局变量
    a += 1
    print(a)
func()
a = 10
def f1():
    a = 10
    print(a)  # 10
    def f2():
        a = 15
        print(a)  # 15
        def f3():
            global a
            a += 1
            print(a)  # 11
        print(a)  # 15
        f3()
    print(a)  # 10
    f2()
    print(a)  # 10
f1()
a = 10
def func():
    a = 10
    def foo():
        a = 15
        def f1():
            a = 20
            def f2():
                nonlocal a
                a += 5
                print(a)  # 25
            print(a)  # 20
            f2()
            print(a)  # 25
        print(a)  # 15
        f1()
        print(a)  # 15
    print(a)  # 10
    foo()
    print(a)  # 10
print(a)  # 10
func()
a = 10
def func():
    a = 10
    def foo():
        nonlocal a
        a += 1
        print(a)  # 11
    foo()
    print(a)  # 11
func()
print(a)  # 10
a = 10
def func():
    a = 30
    def f1():
        def foo():
            nonlocal a
            a += 1
            print(a)  # 31
        foo()
        print(a)  # 31
    f1()
func()
print(a)  # 10

global:修改全局空间的变量对应的值

nonlocal:在最外层的函数中,修改局部空间的变量值.完全不涉及全局变量,只修改离它最近的一层,最近的一层没有变量继续向上找,直到找到最外层函数

posted @ 2020-10-22 14:11  Ylinn  阅读(101)  评论(0)    收藏  举报