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

資訊專欄INFORMATION COLUMN

python中的global和nonlocal

gyl_coder / 2498人閱讀

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

聲明: 這篇文章很大程度上借鑒了Global, Local and nonlocal Variables。
local變量

與其它的編程語言相同,在函數(shù)中聲明的變量都是local變量。作用域僅限于函數(shù)中,從函數(shù)外是訪問不到的。

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變量

在源文件中(非函數(shù)或類)聲明的變量默認(rèn)是global變量。

在函數(shù)中可以隨意讀取global變量,這一點不多說,不管是函數(shù)聲明在前,還是global變量聲明在前

涉及到修改global變量的時候,要特別注意了: 如果在函數(shù)體中未使用global聲明這個變量,那么函數(shù)體中修改的是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"

正確的做法應(yīng)該是:

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引入的,只能用于嵌套函數(shù)中。在嵌套函數(shù)中使用nonlocal聲明變量,可以修改外層函數(shù)中的變量。

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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/44097.html

相關(guān)文章

  • Python3 關(guān)鍵字nonlocalglobal的用法與區(qū)別

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

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

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

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

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

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

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

    leejan97 評論0 收藏0
  • python開發(fā)第四篇--函數(shù)

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

    lemanli 評論0 收藏0

發(fā)表評論

0條評論

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