• global与nonlocal详解


    global关键字

            global适用于函数内部修改全局变量的值。这句话怎么理解?我们用代码来直观的解释一下。

            如上图,我们想要在函数内部修改全局变量x的值,运行代码后报错,翻译一下报错内容,意思是“局部变量'x'在赋值前被引用”。换句话说就是x是个局部变量,在改变它的值之前x没有被定义(没有被初始化赋值)。

            有人会问,上面不是定义了全局变量x吗?这是因为在函数内部可以引用全局变量的值,但是不能修改全局变量的值。如果要在函数内部修改全局变量x的值,那就得在函数内部用global修饰x,就是告诉解释器,现在函数内部这个x和全局变量x是同一个引用了,可以随意改变了。我们来看下图中的代码示例

    图片

            同理,如果在最上面没有定义全局变量x,直接在函数内部用global修饰了局部变量x,那么在函数外部也是可以调用变量x的,因为此时x是全局变量了,如下图代码所示

         继续看,如果在函数f1()中用global修饰了x,那么想在函数f2()中如果想更改x的值,该怎么办呢?此类情况和第一种情况是一样的,只需要在f2()中用global修饰x即可,继续看代码示例

    图片

    nonlocal关键字

            nonlocal适用于嵌套函数中内部函数修改外部变量的值。嵌套函数?很好理解,就是一个函数里面还有一个函数。如下图可以看到,在嵌套函数f2()中,是可以直接调用外部变量x。但是如果要对x的值进行修改,那么就会报错。且报错内容与global中第一个示例相同。

     

    图片

    图片

            那么要在f2()中修改外部变量x的值,我们就得用nonlocal关键字来修饰x,修饰后就是告诉解释器,此x和外部的x是同一个变量了,而不是在f2的内存中新建的x,如下图代码示例

             如果f2()的外部没有定义x,在f2()中直接用nonlocal修饰x,那么就会报错,如下图,所以要注意,这一点nonlocal是和global不同的地方。

     更多文章请关注公众号:python时间到

  • 相关阅读:
    强烈推荐好用的文本编辑器Notepad++
    MSP430学习笔记9PS2键盘解码
    MSP430学习笔记8ST7920 12864液晶显示并行接口
    MSP430学习笔记74*4键盘的对应数码管显示
    MSP430学习笔记6动态数码管的显示
    MSP430寄存器中文注释
    MSP430学习小结3MSP430基本时钟模块
    ST7920 12864液晶图片取模,显示你想显示的图片。
    MSP430学习小结2程序主体结构安排及低功耗转载
    Windows Phone开发之路(4) XAML基础(上)
  • 原文地址:https://www.cnblogs.com/zy0209/p/15984898.html
Copyright © 2020-2023  润新知