python global 和 nonlocal 的理解

Posted lif323

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python global 和 nonlocal 的理解相关的知识,希望对你有一定的参考价值。

global

如果存在全局变量a,和函数 f 而函数f内部不存在 " a = expressions ",函数内部可以使用全局变量a;
示例代码如下:
代码

a = 10
def test1():
    b = a + 1
    print(b)
test1()

运行结果:
11

如果函数f内部存在 “a = expressions”, 那么有避免报错有两种方式:1.该表达式出现在函数使用变量a; 2.使用 global来声明该变量;
代码

a = 10
def test2():
    a = 12
    print(a)
test2()

运行结果:
12
代码

a = 10
def test2():
    print(a)
     a = 12
test2()

运行结果:
UnboundLocalError: local variable \'a\' referenced before assignment
代码

a = 10
def test2():
    global a
    print(a)
    a = 12
test2()

运行结果:
12

nonlocal

主要用于让函数内部定义的函数访问外层函数定义的变量。
代码:

def outer():
    num = 1
    def inner1():
        print("inner1: %d" % (num))
        def inner2():
            nonlocal num = 3
            print("inner2: %d" % (num))
        inner2()
    inner1()
    print("outer: %d" % (num))
outer()

运行结果:
inner1: 1
inner2: 3
outer: 3
nonlocal所声明的变量必须在当前函数的外层函数定义,如果外部函数仅仅使用global声明全局变量,这种方式会报错:
代码:

def outer():
    num = 1
    def inner1():
        print("inner1: %d" % (num))
        def inner2():
            nonlocal num
            num = 3
            print("inner2: %d" % (num))
        inner2()
    inner1()
    print("outer: %d" % (num))
outer()

运行结果:
SyntaxError: no binding for nonlocal \'num\' found

参考

https://www.cnblogs.com/summer-cool/p/3884595.html
https://blog.csdn.net/xCyansun/article/details/79672634

以上是关于python global 和 nonlocal 的理解的主要内容,如果未能解决你的问题,请参考以下文章

python-global和nonlocal区别

python中global 和 nonlocal 的作用域

python globals()和locals(),global和nonlocal,以及闭包

Python中的global和nonlocal

python global 和 nonlocal 的理解

python中global 和 nonlocal 的作用域