日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Python中變量的作用域

 元東sntpxtmln9 2019-01-14

一、變量作用域的含義

變量的作用域說白了就是變量的值從哪里獲取,或者說變量取值的地方

我們在寫代碼過程中會用到很多變量,這些變量會出現(xiàn)在各種代碼塊中,有的出現(xiàn)在函數(shù)塊里,有的在函數(shù)塊外,例如:

def n2: a = 1 b = 2 def n1: b = 3 print(b) print(a) n1n2結(jié)果:31

在這個例子中,對于變量a,b的值,是應(yīng)該先識別函數(shù)中的還是先識別函數(shù)外的呢,其實python內(nèi)部在識別變量的值得時候是有順序的,不是胡亂讀取的,python內(nèi)部對于獲取變量的值是規(guī)定了一個順序的。

二、變量定義域順序

LEGB原則

當你在代碼里聲明一個變量后,python會在LEGB四個作用域里搜索變量的值,它的搜索是有順序的,第一步現(xiàn)在L也就是當前最里層局部作用域內(nèi)找,如果沒找到,第二步會跑到包含當前層的上一層作用域E里找,還沒找到的話,第三部會去模塊級的里面G里找,最后是去python里的固定模塊里找。

三、在不同作用域修改變量的值

問題1.,既然對于變量的值的搜索有順序,如果當前在全局里已經(jīng)有變量a的值,我在局部域里想修改a的值,怎么修改呢?

問題2. 如果變量是在上一層的函數(shù)里有值,我想在當前層函數(shù)內(nèi)修改,又如何操作呢?

問題1的解答:對于這種情況需要用到global,在重新給變量a賦值時,要先聲明變量global a,

a = 1def n: global a print(a) a = 123 print(a)n結(jié)果:1123 問題2的解答:對于這種情況需要用到nonlocal,在重新給變量a賦值時,要先聲明變量nonlocal a

def n1: a = 1 def n2: nonlocal a a = 2 print(a) n2 print(a)n1結(jié)果:22四、哪些情況適用變量的作用域?qū)τ谀K,類,函數(shù)里出現(xiàn)的變量就要注意了,它們會引入新的作用域,在這里如果內(nèi)部

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多