在python中內嵌函數可以引用外層函數作用域中的變量,并且可以通過某種操作來對其進行修改。
這里我們就可以使用到nonlocal語句來進行聲名。我之前寫過一篇global用法的文章,nonlocal的用法與global的用法很像,本篇博客的后面就會講一下nonlocal和global的區別。
nonlocal語句的用法
語法:
允許內嵌函數修改定義在語法上位于外層的函數的作用域中的一個或者多個名稱
用法:
nonlocal[變量名]
注意:
此語句僅適用于python3,在python2中內嵌函數可以使用外層作用域中通過賦值的所有名稱,但不能進行修改;python3則可以使用并且可以進行修改。
語法實現:
def
dome_fun
(
)
:
num
=
0
def
dome_fun_1
(
)
:
nonlocal
num
num
+=
1
return
num
return
num
在這段dome里面,變量num既不是全局變量,也不是局部變量,而是外部內嵌函數的變量。
nonlocal與global的區別
在談到nonlocal與global的區別之前,我們應該了解python中引用變量的順序是什么樣的。
python變量引用順序:從當前作用域開始尋找變量,如果沒找到就往上一層作用域尋找,沒找到就再上一層。
具體步驟:當前作用域局部變量->外層作用域變量->再外層作用域變量->…->當前模塊全局變量->pyhton內置變量
1、作用對象不同:
nonlocal作用于外部內嵌函數的變量;
global作用于全局變量。
2、global可以改變全局變量,同時可以定義新的全局變量;nonlocal只能改變外層函數變量,不能定義新的外層函數變量,并且nonlocal也不能改變全局變量。
3、聲名:
global聲名此變量為全局變量;nonlocal聲名此變量與外層同名變量為相同的變量。
4、使用的范圍不同:
global關鍵字可以用在任何地方,包括最上層函數中和嵌套函數中;
nonlocal關鍵字只能用于嵌套函數中,并且外層函數中必須定義了相應的局部變量,否則會發生錯誤
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
