python中global和nonlocal用法的詳細說明


 

一、global

1、global關鍵字用來在函數或其他局部作用域中使用全局變量。但是如果不修改全局變量也可以不使用global關鍵字。

 
gcount = 0

def global_test():
    gcount+=1
    print (gcount)
global_test()
 

以上代碼會報錯:第一行定義了全局變量,在內部函數中又對外部函數進行了引用並修改,那么python會認為它是一個局部變量,有因為內部函數沒有對其gcount進行定義和賦值,所以報錯。

 

2、如果局部要對全局變量修改,則在局部聲明該全局變量

 
gcount = 0
 
def global_test():
    global  gcount
    gcount+=1
    print (gcount)
global_test()
 

以上輸出為:1

 

3、如果局部不聲明全局變量,並且不修改全局變量,則可以正常使用

gcount = 0
 
def global_test():
    print (gcount)
global_test()

以上輸出為:0

 

 二、nonlocal

1、 nonlocal聲明的變量不是局部變量,也不是全局變量,而是外部嵌套函數內的變量

 

def make_counter(): 
    count = 0 
    def counter(): 
        nonlocal count 
        count += 1 
        return count 
    return counter 
       
def make_counter_test(): 
  mc = make_counter() 
  print(mc())
  print(mc())
  print(mc())
 
make_counter_test()

  以上輸出為:

1

2

3

三、混合使用

 
def scope_test():
    def do_local():
        spam = "local spam" #此函數定義了另外的一個spam字符串變量,並且生命周期只在此函數內。此處的spam和外層的spam是兩個變量,如果寫出spam = spam + “local spam” 會報錯
    def do_nonlocal():
        nonlocal  spam        #使用外層的spam變量
        spam = "nonlocal spam"
    def do_global():
        global spam
        spam = "global spam"
    spam = "test spam"
    do_local()
    print("After local assignmane:", spam)
    do_nonlocal()
    print("After nonlocal assignment:",spam)
    do_global()
    print("After global assignment:",spam)
 
scope_test()
print("In global scope:",spam)
 

以上輸出為:

After local assignmane: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam


免責聲明!

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



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