• python3 nonlocal vs global


    考虑这样一个python程序:

    x = 12

    def func():

          x = 1

    func()

    print(x)

    输出为:x = 12

    因为函数内部定义的x被认为只属于局部作用域,为了表明我么引用的是全局的x而不是新定义一个局部的x,

    可以使用global关键字:

    x = 12

    def func();

        global x

        x = 1

    func()

    print(x)

    可以发现输出已经变成了1,也就是在函数内部成功修改了一个全局变量

    还有一种情形,就是嵌套的局部作用域的问题:

    def g():

        x = 12

        func():

             x = 1

        func()

        print(x)

    g()

    这样输出的结果为12,因为func函数调用时定义的X也被认为只属于局部作用域了,但是此时函数g()里定义的x并非全局变量,用前述的global关键字肯定是不行的,

    所以又有了nonlocal,这样写:

    def g():

         x = 12

         func():

             nonlocal x

             x = 1

         func()

         print(x)

    g()

    这时,输出的结果就是我们预期的1了,nonlocal就是声明要引用一个外部作用域(全局作用域除外)中定义的变量。

    需要指出的是,上述关键字之所以需要,是因为我们试图去修改全局变量或者处于外部作用域的变量,如果在局部作用域内部重定义全局变量或外部作用域变量,仅仅只读访问(比如print出来)是完全没有问题的,参看下面这个例子:

    a = 12
    def g():
        b = 11
        def func():
            print(a)
            print(b)
        func()
        return
    if __name__ == '__main__':
        g()

  • 相关阅读:
    坑人的微信新版支付(V3.3.6)
    Chrome 实现前端页面自动刷新
    css基础
    基础HTML
    HTML5的世界
    Web前端开发的前景与用处
    JavaScript由浅入深(一)——类型、值和变量
    JS常用的方法总结
    js金钱分割,正则
    用 HTML5+ payment方法支付宝支付遇到的坑
  • 原文地址:https://www.cnblogs.com/hustxujinkang/p/4605480.html
Copyright © 2020-2023  润新知