這篇文章主要給大家介紹了關於Python中關鍵字nonlocal和global的聲明與解析的相關資料,文中介紹的非常詳細,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
一、Python中global與nonlocal 宣告
如下程式碼
a = 10 def foo(): a = 100
執行foo( ) 結果a 還是10
函數中對變數的賦值,變數總是綁定到函數的局部命名空間 ,使用global 語句可以改變這個行為。
>>> a 10 >>> def foo(): ... global a ... a = 100 ... >>> a 10 >>> foo() >>> a 100
解析名稱時先檢查局部作用域,然後由內而外一層層檢查外部巢狀函數定義的作用域,如找不到搜尋全域指令空間和內建命名空間。
儘管可以層層向外(上)查找變量,但是! ..python2 只支援最裡層作用域(局部變量)和全域命令空間(gloabl),也就是說內部函數不能給定義在外部函數中的局部變數重新賦值,例如下面程式碼是不起作用的
def countdown(start): n = start def decrement(): n -= 1
python2 中,解決方法可以是把修改值放到列表或字典中,python3 中,可以使用nonlocal 宣告完成修改
def countdown(start): n = start def decrement(): nonlocal n n -= 1
二、Python nonlocal 與global 關鍵字解析
#nonlocal
首先,要先明確nonlocal 關鍵字是定義在閉包裡面的。請看以下程式碼:
x = 0 def outer(): x = 1 def inner(): x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x)
結果
# inner: 2 # outer: 1 # global: 0
現在,在閉包裡面加入nonlocal關鍵字進行宣告:
x = 0 def outer(): x = 1 def inner(): nonlocal x x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x)
結果
## inner: 2 # outer: 2 # global: 0
看到差別了麼?這是一個函數裡面再巢狀了一個函數。當使用 nonlocal 時,就宣告了該變數不只在巢狀函數inner()裡面
才有效, 而是在整個大函數裡面都有效。
global
還是一樣,看一個例子:
x = 0 def outer(): x = 1 def inner(): global x x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x)
結果
# inner: 2 # outer: 1 # global: 2
global 是對整個環境下的變數起作用,而不是對函數類別的變數起作用。
總結
【相關推薦】
1. Python免費影片教學
2. Python基礎入門教學
以上是關於nonlocal和global的詳細解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!