python中的global和nonl

发布时间:2019-10-10 09:16:48编辑:auto阅读(2814)

    声明: 这篇文章很大程度上借鉴了Global, Local and nonlocal Variables

    local变量

    与其它的编程语言相同,在函数中声明的变量都是local变量。作用域仅限于函数中,从函数外是访问不到的。

    In [1]: def f():
                s = 'local val'
                print('read s from interval:', s)
    
    In [2]: print(s)
    NameError: name 's' is not defined
    
    In [3]: f()
    read s from interval: local val

    global变量

    在源文件中(非函数或类)声明的变量默认是global变量。

    • 在函数中可以随意读取global变量,这一点不多说,不管是函数声明在前,还是global变量声明在前
    • 涉及到修改global变量的时候,要特别注意了: 如果在函数体中未使用global声明这个变量,那么函数体中修改的是local变量的值,global变量并未更新。
    In [4]: s = 'global val'
    
    In [6]: def f():
       ...:     s = 'change global val'
       ...:     print('change global val', s)
       ...:     
    
    In [7]: f()
    change global val change global val
    
    In [8]: s
    Out[8]: 'global val'

    正确的做法应该是:

    In [4]: s = 'global val'
    
    In [6]: def f():
       ...:     global s
       ...:     s = 'change global val'
       ...:     print('change global val', s)
       ...:     
    
    In [7]: f()
    change global val change global val
    
    In [8]: s
    Out[8]: 'change global val change global val'

    nonlocal变量

    nonlocalpython3引入的,只能用于嵌套函数中。在嵌套函数中使用nonlocal声明变量,可以修改外层函数中的变量。

    In [11]: def outer():
        ...:     s = 'outer val'
        ...:     def inner():
        ...:         nonlocal s
        ...:         s = 'inner val'
        ...:         print('change outer s',s)
        ...:     print('before inner(), s=', s)
        ...:     inner()
        ...:     print('after inner(), s=', s)
        ...:     
    
    In [12]: outer()
    before inner(), s= outer val
    change outer s inner val
    after inner(), s= inner val
    

关键字

上一篇: 规范-编码

下一篇: python 加密解密