摘要:關鍵字在中,閉包只能讀外部函數的變量,而不能改寫它。注意關鍵字是中出現的所以在中無法直接使用關鍵字里只有種作用域全局作用域和局部作用域。兩者使用的范圍不同。
關鍵字nonlocal
在Python 2.x中,閉包只能讀外部函數的變量,而不能改寫它。為了解決這個問題,Python 3.x引入了nonlocal關鍵字,在閉包內用nonlocal聲明變量,就可以讓解釋器在外層函數中查找變量名。
注意:關鍵字nonlocal:是python3.X中出現的,所以在python2.x中無法直接使用.
關鍵字global
Python里只有2種作用域:全局作用域和局部作用域。全局作用域是指當前代碼所在模塊的作用域,局部作用域是指當前函數或方法所在的作用域。局部作用域里的代碼可以讀外部作用域(包括全局作用域)里的變量,但不能更改它。如果想更改它,這里就要使用global關鍵字了
實例
關鍵字nonlocal的作用與關鍵字global類似,使用nonlocal關鍵字可以在一個嵌套的函數中修改嵌套作用域中的變量。
看兩個例子
實例1
1
2
3
4
5
6
name = "pythontab"
def func()
global name name = "pythontab.com"
func()
print(name)
結果:
1
pythontab.com
實例2
1
2
3
4
5
6
7
8
def func():
name = "pythontab" def foo(): nonlocal name name = "pythontab.com" foo() print(name)
func()
結果:
1
pythontab.com
注意看, 實例2中并沒有使用global關鍵字而改變了name的值。
總結
主要區別有以下兩點:
兩者的功能不同。global關鍵字修飾變量后標識該變量是全局變量,對該變量進行修改就是修改全局變量,而nonlocal關鍵字修飾變量后標識該變量是上一級函數中的局部變量,如果上一級函數中不存在該局部變量,nonlocal位置會發生錯誤(最上層的函數使用nonlocal修飾變量必定會報錯)。
兩者使用的范圍不同。global關鍵字可以用在任何地方,包括最上層函數中和嵌套函數中,即使之前未定義該變量,global修飾后也可以直接使用,而nonlocal關鍵字只能用于嵌套函數中,并且外層函數中定義了相應的局部變量,否則會發生錯誤(見1)。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43306.html
摘要:理解的名字空間的名字空間是一個非常核心的內容。在中提供了一個關鍵字來修改外部嵌套函數的名字空間,但是要使用才有,我等使用的只能眼饞一下。 理解 Python 的 LEGB 名字空間 Python 的名字空間是 Python 一個非常核心的內容。 其他語言中如 C 中,變量名是內存地址的別名,而在 Python 中,名字是一個字符串對象,它與他指向的對象構成一個{name:obje...
摘要:聲明這篇文章很大程度上借鑒了。作用域僅限于函數中,從函數外是訪問不到的。變量在源文件中非函數或類聲明的變量默認是變量。正確的做法應該是變量是引入的,只能用于嵌套函數中。在嵌套函數中使用聲明變量,可以修改外層函數中的變量。 聲明: 這篇文章很大程度上借鑒了Global, Local and nonlocal Variables。 local變量 與其它的編程語言相同,在函數中聲明的變量...
摘要:使用單引號雙引號和三引號或來表示字符串。不可變的集合函數會以字典類型返回當前位置的全部全局變量。用于將進制整數轉換成進制,以字符串形式表示。返回字符串中最大的字母,或數組中的最大值。的作用就是減少了單行函數的定義。 問題答案由本人整理 1.基礎語法是否熟悉?介紹一下 Python和其他語言最大的區別就是使用行和縮進,而不是大括號({})或者分號(;)來控制類、函數或者邏輯判斷。Pyt...
摘要:函數返回值支持多個,返回多個時,使用逗號分隔。如上,與這個參數按照由左到右依次賦值給形參和供函數內部使用。在傳入函數時,便是將這個引用傳入了函數。需要使用關鍵字聲明將變量作用域變為函數外部非全局變量,及閉包作用域。 < 返回索引頁 函數 函數定義 返回值 函數的調用 函數的參數 順序參數 參數的默認值 可變參數 關鍵字參數 參數的組合 參數的專遞 函數作用域 內建...
摘要:初步認識裝飾器函數裝飾器用于在源代碼中標記函數,以某種方式增強函數的行為。函數裝飾器在導入模塊時立即執行,而被裝飾的函數只在明確調用時運行。只有涉及嵌套函數時才有閉包問題。如果想保留函數原本的屬性,可以使用標準庫中的裝飾器。 《流暢的Python》筆記本篇將從最簡單的裝飾器開始,逐漸深入到閉包的概念,然后實現參數化裝飾器,最后介紹標準庫中常用的裝飾器。 1. 初步認識裝飾器 函數裝飾...
閱讀 2415·2021-11-11 11:01
閱讀 3287·2021-10-11 10:57
閱讀 2645·2021-09-30 09:46
閱讀 3492·2021-07-26 23:38
閱讀 1564·2019-08-29 12:22
閱讀 650·2019-08-29 11:28
閱讀 2352·2019-08-26 14:04
閱讀 3050·2019-08-23 18:34