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 使用的是局部,未定义,无法修改。

  • 相关阅读:
    hdu 1402 大数A*B模板(FFT)
    ccpc 哈尔滨L题 LRU Algorithm
    今年得慢慢学的
    Codeforces Round #629 (Div. 3) E. Tree Queries(LCA)
    Codeforces Global Round 7 D2. Prefix-Suffix Palindrome (Hard version) -- manacher
    hdu 3068 (manacher算法)
    用Socket API建立简易tcp服务端和客户端
    Win下建立Socket时注意事项
    线段树(Segment Tree)
    Codeforces Round #643 (Div. 2)
  • 原文地址:https://www.cnblogs.com/mysterious-killer/p/10126937.html
Copyright © 2011-2022 走看看