• 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时间到

  • 相关阅读:
    词频统计
    第二周每周例行报告
    事务管理(ACID)
    Redis
    jar包和war包的区别
    CSS实现Loading加载动画
    如何实现“返回顶部”的页面效果
    PHP页面跳转-常见方法
    局域网络调试方式
    Thinkphp 统计数据库字段总值
  • 原文地址:https://www.cnblogs.com/zy0209/p/15984898.html
Copyright © 2020-2023  润新知