Python中關鍵字nonlocal和global的宣告與解析介紹

高洛峰
發布: 2017-03-13 09:29:11
原創
1682 人瀏覽過

這篇文章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 是對整個環境下的變數起作用,而不是對函數類別的變數起作用。 ###

以上是Python中關鍵字nonlocal和global的宣告與解析介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板