国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python中的global和nonlocal

gyl_coder / 2497人閱讀

摘要:聲明這篇文章很大程度上借鑒了。作用域僅限于函數中,從函數外是訪問不到的。變量在源文件中非函數或類聲明的變量默認是變量。正確的做法應該是變量是引入的,只能用于嵌套函數中。在嵌套函數中使用聲明變量,可以修改外層函數中的變量。

聲明: 這篇文章很大程度上借鑒了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 val
global變量

在源文件中(非函數或類)聲明的變量默認是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變量

nonlocalpython3引入的,只能用于嵌套函數中。在嵌套函數中使用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

相關文章

  • Python3 關鍵字nonlocalglobal的用法與區別

    摘要:關鍵字在中,閉包只能讀外部函數的變量,而不能改寫它。注意關鍵字是中出現的所以在中無法直接使用關鍵字里只有種作用域全局作用域和局部作用域。兩者使用的范圍不同。 關鍵字nonlocal 在Python 2.x中,閉包只能讀外部函數的變量,而不能改寫它。為了解決這個問題,Python 3.x引入了nonlocal關鍵字,在閉包內用nonlocal聲明變量,就可以讓解釋器在外層函數中查找變量名...

    PumpkinDylan 評論0 收藏0
  • python基礎教程:作用域命名空間

    摘要:正如我們前面舉的張三的例子那樣,不同命名空間中的名稱之間沒有任何關系。作用域作用域,是一個命名空間可直接發放完的代碼的文本區域。刪除也是如此,語句會從局部命名空間的引用中移除對的綁定。 命名空間和作用域的概念我們之前也提到過,比如內置函數globals(),函數中變量的作用域,模塊使用的import等等。這些可能讓我們對這兩個概念有了大致的理解。本節再詳細探討一下。 showImg(h...

    wangzy2019 評論0 收藏0
  • Python 的命名空間

    摘要:真正管理這些名子的事物就是本文的主角命名空間。閉包命名空間閉包函數的名稱空間引入。函數調用時產生新的局部命名空間函數返回結果拋出異常時釋放命名空間,每一次遞歸都生成一個命名空間。標識符產生地點決定標識符所處的命名空間。 懶得掃全文的童鞋,可以直接跳到最后看總結。我們先從一個簡單的栗子說起: 栗子 a 文件中有變量 va 以及類 A,b 文件導入 a 中class A ,并打印出 A: ...

    ralap 評論0 收藏0
  • PyTips 0x04 - Python 閉包與作用域

    摘要:項目地址閉包在計算機科學中,閉包英語,又稱詞法閉包或函數閉包,是引用了自由變量的函數。這個被引用的自由變量將和這個函數一同存在,即使已經離開了創造它的環境也不例外。 項目地址:https://git.io/pytips 閉包(Closure) 在計算機科學中,閉包(英語:Closure),又稱詞法閉包(Lexical Closure)或函數閉包(function closures),是...

    leejan97 評論0 收藏0
  • python開發第四篇--函數

    摘要:第一種情況打印結果為第二種打印結果為因為如果默認參數是一個可變的數據類型,那么他在內存中永遠是一個。 名稱空間與作用域 1.變量儲存在一個內存空間中 2.當程序運行的時候代碼從上到下依次執行,它會將變量與值的關系存儲在一個空間中,這個空間叫名稱空間,命名空間,全局名稱空間 3.當程序遇到函數時,它會將函數名存在內存中,函數體漠不關心 4.當程序執行的時候,內存會臨時開辟一個空間,...

    lemanli 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<