• global 和 nonlocal关键字


    当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。

    def fun():  
        global num1  
        num1=2  
        print("函数内修改后num1=",num1)  
    num1=1  
    print("初始num1=",num1)  
    fun()  
    print("运行完函数后num1=",num1)  

    运行结果:

    初始num1= 1
    函数内修改后num1= 2
    运行完函数后num1= 2

    使用global关键字就是告诉python编译器这个变量不是局部变量而是全局变量,其实有点像是"引用"的意思

    如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下实例:

    #!/usr/bin/python3
     
    def outer():
        num = 10
        def inner():
            nonlocal num   # nonlocal关键字声明
            num = 100
            print(num)
        inner()
        print(num)
    outer()

    以上实例输出结果:

    100
    100

    另外有一种特殊情况,假设下面这段代码被运行:
    #!/usr/bin/python3
     
    a = 10
    def test():
        a = a + 1
        print(a)
    test()

    以上程序执行,报错信息如下:

    D:softwarePython36python.exe F:/pythonProjects/leetcode/Test.py
    Traceback (most recent call last):
      File "F:/pythonProjects/leetcode/Test.py", line 7, in <module>
        test()
      File "F:/pythonProjects/leetcode/Test.py", line 3, in test
        a = a + 1
    UnboundLocalError: local variable 'a' referenced before assignment

    错误信息为局部作用域引用错误,因为 test 函数中的 a 使用的是局部,未定义,无法修改。

    修改 a 为全局变量,通过函数参数传递,可以正常执行输出结果为:

    #!/usr/bin/python3
     
    a = 10
    def test(a):
        a = a + 1
        print(a)
    test(a)

    执行输出结果为:

    11

  • 相关阅读:
    js 变量命名规范
    JS
    python 处理中文十六进制的encode %E9%99%88%E8%80%81%E5%B8%88/%E5%9B%BE%E7%89%87
    Pycharm 项目上传至Gitee/Github详细步骤
    Python 类型建议符, Python 定义函数的时候有冒号:
    Python 解析 JSON
    Python 解析 JSON
    Mac 安装 WordPress
    java常用书籍下载
    Docker环境搭建Redis4.0 Cluster
  • 原文地址:https://www.cnblogs.com/whu-2017/p/9237644.html
Copyright © 2020-2023  润新知