python3的全局變量和局部變量


局部變量

  1. 定義在函數體內部的變量稱為局部變量
  2. 函數的形參也是局部變量
  3. 局部變量的作用范圍只在聲明該局部變量的函數體內
  4. 局部變量在函數調用時被創建,在函數調用完成后自動銷毀

全局變量

  1. 定義在函數體外,模塊內的變量稱為全局變量
  2. 全局變量在所有函數體內都可以進行訪問
  3. 全局變量在函數體內不能直接修改綁定關系
a = 100
def test():
    a = 50
    print(a)

test()
print(a)

輸出結果:

50
100

 

python3的作用域

作用域也叫命名空間,是訪問時查找變量的范圍空間

python3有四個作用域

作用域 英文解釋 英文簡寫
局部作用域(函數內) Local(function) L
外部嵌套函數作用域 Enclosing function locals E
函數定義所在模塊作用域 Global(module) G
python內置模塊的作用域 Bui B

當訪問一個變量的時候,變量查找順序是先查找本地變量,然后是包裹此函數外部的函數內的變量,之后是全局變量,最后是內建作用域內的變量 。

在默認情況下,變量名賦值會在當前作用域內創建變量和修改變量。

v = 100  # 全局作用域


def fun1():
    v = 200  # 外部嵌套函數作用域
    print('fun1.v=', v)

    def fun2():
        v = 300  # 局部作用域
        print('fun2.v=', v)
        print(max)  # max函數都沒有創建,在內建函數作用域中,只讀,不能改變
                    # 可以在其余三個作用域重新創建。
    fun2()


fun1()

print("全局變量.v=", v)

print(max)  # max變量定義在內置模塊的作用域,是解釋執行器提前定義好的

global關鍵字

作用

聲明一個或多個變量,這些變量的作用域為模塊級的作用域的變量,即全局變量

將賦值變量映射到模塊文件內部的作用域

a = 10
def test():
    global a
    a = 5
    print(a)
test()
print(a)

輸出結果:

5
5

說明:

全局變量如果要在函數內部被賦值,則必須經過全局聲明,否則會被認為是局部變量

不能先聲明局部變量,再用global聲明為全局變量

global變量列表里的變量名不能出現在次作用域內的形參列表

 

nonlocal語句

nonlocal聲明的變量的作用域是外部嵌套函數作用域

def test():
    a = 10

    def test2():
        nonlocal a 
        a = 5
        print(a)
    
    test2()
    print(a)
test()

說明:

nonlocal語句只能在被嵌套函數內部進行使用

訪問nonlocal變量將對外部嵌套函數作用域內的變量進行操作

當有兩層或兩層以上函數嵌套時,訪問nonlocal變量只對最近一層的變量進行操作

nonlocal語句的變量列表的變量名不能出現在此函數的參數列表里


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM