Python入門(十八):變數作用域與巢狀函式

陳陳陳Chann發表於2020-10-06

點選跳轉
《Python入門系列目錄》


1. 區域性變數和全域性變數

  • 區域性變數:只能在特定的函式中可以訪問的變數
  • 全域性變數:定義在所有函式最外面的變數
  • 分辨區域性變數與全域性變數的規則
    • 假設有一個變數為a,它出現在函式f()裡面,可以使用如下規則來判斷
      • 如果有global關鍵字修飾變數a,則a為全域性變數
      • 否則,假如a是引數或者出現在等號左邊,則a是區域性變數
      • 否則,a與函式f外層的變數a的屬性相同
  • 區域性變數可以在外部被賦值,但不可以在外部被呼叫

2. 巢狀函式

  • 巢狀函式是指在函式內定義的函式
  • 定義在其他函式內部的函式稱為內建函式,包含有內建函式的函式稱為外部函式
  • 巢狀函式如同區域性變數,是區域性函式,它只能在外層定義它的函式中使用

3. 巢狀函式下的區域性和全域性變數

  • 假設有一個變數a,它出現在函式f裡面,可以使用如下規則來判斷
    • 如果有global關鍵字修飾變數a,那麼不管函式f()是不是巢狀函式,a都為全域性變數
    • 否則,假如a是引數或者出現在等號左邊,則a是區域性變數
    • 否則,a應繼承上層函式中a的屬性
      • 如果函式f不是巢狀函式,那麼a為全域性變數
      • 如果函式f是巢狀函式,那麼a就是上層的a
a = 1  # 全域性變數

def F3():
    def F():
        global a  # a是最外層的全域性變數
        print("In F3's F, a =", a)

    a = 3
    F()

F3()
a = 1

def F4():
    global a

    def F():
        a = 2  # a是F的區域性變數
        print("In F4's F,a=", a)

    F()
    print("In F4, a =", a)  # a是全域性變數

F4()
a = 1

def F5():
    def F():  # a不是F的區域性變數,那就繼承上層函式中a的屬性
        print("In F5's F,a =", a)

    a = 3
    F()

F5()

相關文章