zoukankan      html  css  js  c++  java
  • Python 全局变量和局部变量,global 和 nonlocal关键字

    全局变量和局部变量
        全局变量:定义在函数外的变量
        局部变量:定义在函数内部变量
        获取变量值时候先获取当前作用域变量名称和变量值,如果没找到到上一层作用域招变量的值,在没有就报错,先获取局部变量,没有获取全局变量

    2,局部变量

        def test01():
            a=10
            print('修改前',a)
            a=20
            print('修改后',a)
        def test02():
            a=40
            print('我是02的a',a)
        test01()
        test02()

       
        局部变量就是函数内部定义的变量
        不同函数,可以定义相同名字局部变量,互相不影响
    3.全局变量
        全局变量是声明在函数外部的变量,定义在函数外的拥有全局作用域
        例子1:

            a=100
            print('打印全局变量:',a)
    
            def test1():
                print('test1中使用全局变量',a)
            def test2():
                print('test2中使用全局变量',a)
            test1()
            test2()

        例子2:
            #全局变量与局部变量同名  

            a = 10      #全局变量  
            print("全局变量a:%d"%a)  
            def test01():  
                a = 20  
                print("test01中的a:%d"%a)  
            def test02():  
                print("test02中的a:%d"%a)  
              
            test01()  
            test02() 

     
        当全局变量与局部变量同名时,优先使用局部变量
        修改全局变量(global关键字)

            a=100
            print('全局变量',a)
            def test1():
                global a
                a=200
                print('test1中修改全局变量a',a)
            def test2()
                print('tes2中使用全局变量',a)
            test1()


    global 和 nonlocal关键字
        当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。
        以下实例修改全局变量 num:

            #!/usr/bin/python3
            num = 1
            def fun1():
                global num  # 需要使用 global 关键字声明
                print(num)
                num = 123
                print(num)
            fun1()

        以上实例输出结果:
            1
            123

        如果要修改嵌套作用域(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()

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

            Traceback (most recent call last):
              File "test.py", line 7, in <module>
                test()
              File "test.py", line 5, in test
                a = a + 1
            UnboundLocalError: local variable 'a' referenced before assignment

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

  • 相关阅读:
    N皇后求解。万万没想到,只用一个一维数组就搞定了。还体现了回溯。
    图的存储与实现(一),使用邻接矩阵
    201671010139 2016-2017-2 《Java程序设计》关于java的初学体验总结
    题目常用解法
    【问题】如何批量导出AI文件里内嵌的图片
    安全算法基础(一)
    对安全的认知
    6月
    渗透--还是tp
    c++学习————VC报错解决方案(vc2013)
  • 原文地址:https://www.cnblogs.com/mysterious-killer/p/10126937.html
Copyright © 2011-2022 走看看