摘要:聲明這篇文章很大程度上借鑒了。作用域僅限于函數中,從函數外是訪問不到的。變量在源文件中非函數或類聲明的變量默認是變量。正確的做法應該是變量是引入的,只能用于嵌套函數中。在嵌套函數中使用聲明變量,可以修改外層函數中的變量。
聲明: 這篇文章很大程度上借鑒了Global, Local and nonlocal Variables。local變量
與其它的編程語言相同,在函數中聲明的變量都是local變量。作用域僅限于函數中,從函數外是訪問不到的。
In [1]: def f(): s = "local val" print("read s from interval:", s) In [2]: print(s) NameError: name "s" is not defined In [3]: f() read s from interval: local valglobal變量
在源文件中(非函數或類)聲明的變量默認是global變量。
在函數中可以隨意讀取global變量,這一點不多說,不管是函數聲明在前,還是global變量聲明在前
涉及到修改global變量的時候,要特別注意了: 如果在函數體中未使用global聲明這個變量,那么函數體中修改的是local變量的值,global變量并未更新。
In [4]: s = "global val" In [6]: def f(): ...: s = "change global val" ...: print("change global val", s) ...: In [7]: f() change global val change global val In [8]: s Out[8]: "global val"
正確的做法應該是:
In [4]: s = "global val" In [6]: def f(): ...: global s ...: s = "change global val" ...: print("change global val", s) ...: In [7]: f() change global val change global val In [8]: s Out[8]: "change global val change global val"nonlocal變量
nonlocal是python3引入的,只能用于嵌套函數中。在嵌套函數中使用nonlocal聲明變量,可以修改外層函數中的變量。
In [11]: def outer(): ...: s = "outer val" ...: def inner(): ...: nonlocal s ...: s = "inner val" ...: print("change outer s",s) ...: print("before inner(), s=", s) ...: inner() ...: print("after inner(), s=", s) ...: In [12]: outer() before inner(), s= outer val change outer s inner val after inner(), s= inner val
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44097.html
摘要:關鍵字在中,閉包只能讀外部函數的變量,而不能改寫它。注意關鍵字是中出現的所以在中無法直接使用關鍵字里只有種作用域全局作用域和局部作用域。兩者使用的范圍不同。 關鍵字nonlocal 在Python 2.x中,閉包只能讀外部函數的變量,而不能改寫它。為了解決這個問題,Python 3.x引入了nonlocal關鍵字,在閉包內用nonlocal聲明變量,就可以讓解釋器在外層函數中查找變量名...
摘要:正如我們前面舉的張三的例子那樣,不同命名空間中的名稱之間沒有任何關系。作用域作用域,是一個命名空間可直接發放完的代碼的文本區域。刪除也是如此,語句會從局部命名空間的引用中移除對的綁定。 命名空間和作用域的概念我們之前也提到過,比如內置函數globals(),函數中變量的作用域,模塊使用的import等等。這些可能讓我們對這兩個概念有了大致的理解。本節再詳細探討一下。 showImg(h...
摘要:真正管理這些名子的事物就是本文的主角命名空間。閉包命名空間閉包函數的名稱空間引入。函數調用時產生新的局部命名空間函數返回結果拋出異常時釋放命名空間,每一次遞歸都生成一個命名空間。標識符產生地點決定標識符所處的命名空間。 懶得掃全文的童鞋,可以直接跳到最后看總結。我們先從一個簡單的栗子說起: 栗子 a 文件中有變量 va 以及類 A,b 文件導入 a 中class A ,并打印出 A: ...
摘要:項目地址閉包在計算機科學中,閉包英語,又稱詞法閉包或函數閉包,是引用了自由變量的函數。這個被引用的自由變量將和這個函數一同存在,即使已經離開了創造它的環境也不例外。 項目地址:https://git.io/pytips 閉包(Closure) 在計算機科學中,閉包(英語:Closure),又稱詞法閉包(Lexical Closure)或函數閉包(function closures),是...
摘要:第一種情況打印結果為第二種打印結果為因為如果默認參數是一個可變的數據類型,那么他在內存中永遠是一個。 名稱空間與作用域 1.變量儲存在一個內存空間中 2.當程序運行的時候代碼從上到下依次執行,它會將變量與值的關系存儲在一個空間中,這個空間叫名稱空間,命名空間,全局名稱空間 3.當程序遇到函數時,它會將函數名存在內存中,函數體漠不關心 4.當程序執行的時候,內存會臨時開辟一個空間,...
閱讀 3829·2023-04-25 16:32
閱讀 2217·2021-09-28 09:36
閱讀 2039·2021-09-06 15:02
閱讀 676·2021-09-02 15:21
閱讀 926·2019-08-30 15:56
閱讀 3521·2019-08-30 15:45
閱讀 1714·2019-08-30 13:09
閱讀 385·2019-08-29 16:05