1. 程式人生 > >python3的全域性變數和區域性變數

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語句的變數列表的變數名不能出現在此函式的引數列表裡