程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python教程:global、nonlocal關鍵字區別與用法

編輯:Python

一:global:在函數內部引用/聲明全局變量

在自定義函數時,有時候需要引用函數外的一些全局變量,如果不需要修改全局變量的內容,則可以直接引用,像下面這樣:

c = 999
def func():
print(c)
if __name__ == '__main__':
func()

函數的作用只是輸出變量 c 的值,並未對 c 進行修改,所以不會報錯。但如果想要在函數內部對全局變量進行一個修改,則需要使用global關鍵字,

c = 999
def func():
for i in range(10):
c += 1
if __name__ == '__main__':
func()
print(c)。

上面的代碼中,在func函數中嘗試修改 c 這個變量,但會出現如下錯誤:

UnboundLocalError: local variable ‘c’ referenced before assignment

意思是:賦值之前引用了局部變量。global關鍵字可以解決這個問題,如下:

c = 999
def func():
global c # 在修改前使用global關鍵字
for i in range(10):
c += 1
if __name__ == '__main__':
func()
print(c)

另外,global還可以幫助我們在函數內部聲明一個全局變量,如下:

def func():
global c # 在函數內部聲明一個全局變量
c = 100
if __name__ == '__main__':
func()
print(c)

二:nonlocal關鍵字

nonlocal的作用於global類似,只不過global是在函數內部引用/修改全局變量,而nonloca是在內層函數中引用/修改外層函數定義的局部變量(非全局變量)。這種現象也成為閉包。

def func():
c = 100
def foo():
for i in range(10): # 對外層函數的c變量進行修改
c += 1
foo()
print(c)
if __name__ == '__main__':
func()

報錯如下:

UnboundLocalError: local variable 'c' referenced before assignment

與上面的錯誤相同,但這時候不能再使用global關鍵字了,而要使用nonlocal關鍵字,(如果使用了global,則相當於又聲明的一個新的變量)

''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流群:711312441 尋找有志同道合的小伙伴,互幫互助,群裡還有不錯的視頻學習教程和PDF電子書! '''
def func():
c = 100
def foo():
nonlocal c
for i in range(10): # 對外層函數的c變量進行修改
c += 1
foo()
print(c)
if __name__ == '__main__':
func()

這樣就不會報錯了,輸出結果是110.

總的來說:global關鍵字用來在函數或其它局部作用域中使用全局變量。但是如果不使用全局變量也可以不適用global關鍵字聲明,nonlocal關鍵字用來在函數或其它作用域中使用外層(非全局)變量。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved