成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python中的global和nonlocal

gyl_coder / 2521人閱讀

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

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

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

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變量,這一點(diǎn)不多說(shuō),不管是函數(shù)聲明在前,還是global變量聲明在前

涉及到修改global變量的時(shí)候,要特別注意了: 如果在函數(shù)體中未使用global聲明這個(gè)變量,那么函數(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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44097.html

相關(guān)文章

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

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

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

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

    wangzy2019 評(píng)論0 收藏0
  • Python 的命名空間

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

    ralap 評(píng)論0 收藏0
  • PyTips 0x04 - Python 閉包與作用域

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

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

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

    lemanli 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<