首頁  >  文章  >  後端開發  >  python如何在非創建全域變數的地方使用全域變量

python如何在非創建全域變數的地方使用全域變量

silencement
silencement原創
2019-05-27 17:29:283196瀏覽

python如何在非創建全域變數的地方使用全域變量

在Python中,當引用一個變數的時候,對這個變數的搜尋是按找本地作用域(Local)、嵌套作用域(Enclosing function locals)、全域作用域(Global)、內建作用域(builtins模組)的順序來進行的,即所謂的LEGB規則。即python引用變數的順序: 目前作用域局部變數->外層作用域變數->目前模組中的全域變數->python內建變數。

然而當在一個函數內部為一個變數賦值時,並不是按照上面所說LEGB規則來先找到變量,之後就為該變數賦值。在Python中,在函數中為一個變數賦值時,有下面這樣一條規則:「當在函數中給一個變數名賦值是(而不是在一個表達式中對其進行引用),Python總是創建或改變本地作用域的變數名,除非它已經在那個函數中被宣告為全域變數。」

python中golbal全域變數和nonlocal局部變數

global關鍵字用來在函數或其他局部作用域中使用全域變數。

gcount = 0   #定义了一个全局变量,(可以省略global关键字)
 
def global_test():
    print (gcount)    #不修改,只是引用全局变量,不使用global关键字
    
def global_counter():
    global gcount    
    gcount +=1       #修改全局变量,需要使用global关键字
    return gcount

輸出

1

#2

3

nonlocal關鍵字是用來在函數或其他作用域中使用外層(非全域)變數。

def make_counter(): 
    count = 0     #定义一个局部变量,该局部变量作用范围在make_counter()方法内
    def counter(): 
        nonlocal count   #在方法counter()中使用外层局部变量 count 
        count += 1 
        return count 
    return counter 
       
def make_counter_test(): 
  mc = make_counter() 
  print(mc())
  print(mc())
  print(mc())
 
make_counter_test()

輸出

3

#

以上是python如何在非創建全域變數的地方使用全域變量的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn