日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

深入了解Python 變量作用域

瀏覽:13日期:2022-07-16 13:34:17

特點

python的作用域是靜態的,在源代碼中變量名被賦值的位置決定了該變量能被訪問的范圍。即Python變量的作用域由變量所在源代碼中的位置決定。Python中并不是所有的語句塊中都會產生作用域。只有當變量在Module(模塊)、Class(類)、def(函數)中定義的時候,才會有作用域的概念。

1. 函數內部的變量,函數外部不能訪問

def func(): variable = 100 print(variable) print(variable) # name ’variable’ is not defined

2. 函數上層的變量(標量)只能讀取,不能再次定義,初始化

def counter1(): n = 0 def compute(): n = n + 1 # n為標量(數值,字符串,浮點數),Python程序會因為“如果內部函數有引用外部函數的同名變量或者全局變量,并且對這個變量有修改.那么python會認為它是一個局部變量,又因為函數中沒有n的定義和賦值,所以報錯 # y = n + 1 # 更改為y就沒事 # return y return n return compute

variable = 300def test_scopt(): print(variable) # 此時調用局部變量variable并有沒綁定到一個內存對象(沒有定義和初始化,即沒有賦值)。本質上還是遵循的LEGB法則 variable = 200 #因為這里,前面調用過一次,所以variable就變為了局部變量 # print(variable) # 寫在下面就沒問題,因為variable是新的局部變量,而不是重新被定義,卻沒有綁定test_scopt()

Python中的模塊代碼在執行之前,并不會經過預編譯,但是模塊內的函數體代碼在運行前會經過預編譯,因此不管變量名的綁定發生在作用域的那個位置,都能被編譯器知道。Python雖然是一個靜態作用域語言,但變量名查找是動態發生的,直到在程序運行時,才會發現作用域方面的問題,

3. list,dict等復合變量里面的值都可以引用更改

def counter(): n = [0] def compute(): n[0] += 1 # 更改的是n里面的第一個值,不是更改n return n[0] return computefunc = counter()func() # 1func() # 2func() # 3

4. global 聲明全局變量,如果在局部要對全局變量修改,需要在局部也要先聲明該全局變量

def counter1(): n = 0 def compute(): global n # 如果在局部要對全局變量修改,需要在局部也要先聲明該全局變量,但此處也會報錯,因為沒有全局變量n n += 1 return n return compute# rightdef counter1(): global n n = 0 def compute(): global n n += 1 return n return compute

5. nonlocal關鍵字用來在函數或其他作用域中使用外層(非全局)變量

def make_counter(): count = 0 def counter(): nonlocal count # 使用外層非全局變量 count += 1 return count return counter

作用域的類型

在Python中,使用一個變量時并不嚴格要求需要預先聲明它,但是在真正使用它之前,它必須被綁定到某個內存對象(被定義、賦值);這種變量名的綁定將在當前作用域中引入新的變量,同時屏蔽外層作用域中的同名變量。

L(local)局部作用域

局部變量:包含在def關鍵字定義的語句塊中,即在函數中定義的變量。每當函數被調用時都會創建一個新的局部作用域。Python中也有遞歸,即自己調用自己,每次調用都會創建一個新的局部命名空間。在函數內部的變量聲明,除非特別的聲明為全局變量,否則均默認為局部變量。有些情況需要在函數內部定義全局變量,這時可以使用global關鍵字來聲明變量的作用域為全局。局部變量域就像一個 棧,僅僅是暫時的存在,依賴創建該局部作用域的函數是否處于活動的狀態。所以,一般建議盡量少定義全局變量,因為全局變量在模塊文件運行的過程中會一直存在,占用內存空間。注意:如果需要在函數內部對全局變量賦值,需要在函數內部通過global語句聲明該變量為全局變量。

E(enclosing)嵌套作用域

E也包含在def關鍵字中,E和L是相對的,E相對于更上層的函數而言也是L。與L的區別在于,對一個函數而言,L是定義在此函數內部的局部作用域,而E是定義在此函數的上一層父級函數的局部作用域。主要是為了實現Python的閉包,而增加的實現。

G(global)全局作用域

即在模塊層次中定義的變量,每一個模塊都是一個全局作用域。也就是說,在模塊文件頂層聲明的變量具有全局作用域,從外部開來,模塊的全局變量就是一個模塊對象的屬性。注意:全局作用域的作用范圍僅限于單個模塊文件內

B(built-in)內置作用域

系統內固定模塊里定義的變量,如預定義在builtin 模塊內的變量。

作用域鏈:變量名解析LEGB法則

搜索變量名的優先級:局部作用域 > 嵌套作用域 > 全局作用域 > 內置作用域LEGB法則: 當在函數中使用未確定的變量名時,Python會按照優先級依次搜索4個作用域,以此來確定該變量名的意義。首先搜索局部作用域(L),之后是上一層嵌套結構中def或lambda函數的嵌套作用域(E),之后是全局作用域(G),最后是內置作用域(B)。按這個查找原則,在第一處找到的地方停止。如果沒有找到,則會出發NameError錯誤。

example 1

name = 'lzl'def f1(): print(name)def f2(): name = 'eric' f1() f2() # 在函數未執行之前,作用域鏈就已經形成了,此時f1()的上一級應該name = ’lzl’

example 2

def scope_test(): def do_local(): spam = 'local spam' # 此函數定義了另外的一個spam字符串變量,并且生命周期只在此函數內。此處的spam和外層的spam是兩個變量,如果寫出spam = spam + “local spam” 會報錯 def do_nonlocal(): nonlocal spam # 使用外層的spam變量 test spam spam = 'nonlocal spam' def do_global(): global spam spam = 'global spam' spam = 'test spam' do_local() print('After local assignmanent:', spam) # test spam do_nonlocal() print('After nonlocal assignment:',spam) # nonlocal spam do_global() print('After global assignment:',spam) # nonlocal spam ???? 先找是本地變量,找到的本地變量已經在do_nonlocal()里面改變了所以輸出的是nonlocal spamscope_test()print('In global scope:',spam) # global spam

以上就是深入了解Python 變量作用域的詳細內容,更多關于Python 變量作用域的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品日韩一区| 91精品久久久久久久久久不卡| 99久久九九| 精品国产91| 免费一区二区三区在线视频| 国产精品二区影院| 美女视频黄免费的久久| 美女视频黄久久| 精品理论电影在线| 国产+成+人+亚洲欧洲在线| 粉嫩av一区二区三区四区五区 | 亚洲国产福利| 日韩欧美视频专区| 亚洲伦乱视频| 激情五月综合| 亚洲韩日在线| 日韩精品一级二级| 91av一区| 97精品中文字幕| 伊人久久大香线蕉av不卡| 亚洲一区二区免费看| 蜜桃av一区二区在线观看| 视频一区日韩精品| 国产精品超碰| 久久蜜桃精品| 蜜臀久久99精品久久久画质超高清| 中文字幕免费精品| 国产伦一区二区三区| 久久精品国产免费| 久久精品导航| 巨乳诱惑日韩免费av| 久久国产三级| 亚洲风情在线资源| 鲁大师影院一区二区三区| 国产美女久久| 亚洲成人va| 水野朝阳av一区二区三区| 国产精品一站二站| 欧美精选视频一区二区| 蜜臀va亚洲va欧美va天堂| 国产精品一区二区免费福利视频| 精品久久亚洲| 亚洲精品网址| 亚洲制服一区| 国产一区二区三区四区五区传媒| 日本在线精品| 日韩激情网站| 久久蜜桃精品| 欧美自拍一区| 视频二区不卡| 日韩福利视频导航| 88xx成人免费观看视频库| 日本a口亚洲| 91精品亚洲| 国产免费久久| av成人国产| 精品国产欧美日韩一区二区三区| 亚洲深爱激情| 国产va免费精品观看精品视频| 国产精品毛片在线| 久久99精品久久久野外观看| 欧美在线亚洲综合一区| 你懂的网址国产 欧美| 日韩高清欧美| 老牛影视精品| 天堂а√在线最新版中文在线| 黄在线观看免费网站ktv| 日本一区二区高清不卡| 日韩毛片视频| 尤物tv在线精品| 日韩午夜电影| 精品视频国产| 亚洲一区区二区| 国产精品日韩精品在线播放| 欧美va天堂在线| 综合激情五月婷婷| 成人看片网站| 麻豆国产欧美日韩综合精品二区| 91久久国产| 麻豆国产精品一区二区三区| 性欧美长视频| 亚洲最新无码中文字幕久久 | 九一成人免费视频| 高清av一区| 青青草精品视频| 国产亚洲福利| 特黄毛片在线观看| 国产精品tv| 蜜臀国产一区二区三区在线播放| 人人精品亚洲| 国产一区二区三区亚洲| 久久激情五月婷婷| 一级成人国产| 日韩午夜高潮| 亚洲v在线看| 伊人网在线播放| 精品午夜久久| 国产欧美日韩在线一区二区| 亚洲深深色噜噜狠狠爱网站| 国精品一区二区三区| 吉吉日韩欧美| 国产欧美日韩综合一区在线播放| 日韩深夜视频| 国产精品腿扒开做爽爽爽挤奶网站| 欧美成人aaa| 亚洲精品在线国产| 亚洲一区欧美二区| 三级欧美在线一区| 四虎精品永久免费| 亚洲欧美不卡| 欧洲一级精品| 日韩综合在线| 精品三级在线观看视频| 国产精品网址| 69堂免费精品视频在线播放| 中文字幕av一区二区三区人| 国产亚洲一级| 亚洲欧美日韩国产| 99精品美女| 久久精品欧美一区| 久久久9色精品国产一区二区三区| av日韩中文| 日本免费久久| 综合日韩av| 天堂8中文在线最新版在线| 国产精品久久久久久久久妇女| 麻豆国产精品777777在线| 国产高清精品二区| 国产精品一区毛片| 欧美国产中文高清| 欧美国产日韩电影| 麻豆91在线播放| 精品亚洲精品| 精品久久久网| 精品三级av| 日韩毛片视频| 偷拍欧美精品| 一本色道精品久久一区二区三区| av不卡在线| 天堂精品久久久久| 国产乱码精品一区二区三区四区 | 日本欧美大码aⅴ在线播放| 日韩在线观看| 久久精选视频| 亚洲精品一区二区妖精| 亚洲香蕉久久| 成人在线免费观看91| 久久精品在线| 国产精品超碰| 久久成人一区| 91欧美极品| 四虎4545www国产精品 | 久久精品国产成人一区二区三区| 精品入口麻豆88视频| 亚洲性色av| 久久xxxx精品视频| 88久久精品| 免费在线亚洲| 日韩免费小视频| 蜜桃av一区| 国产精品扒开腿做爽爽爽软件| 久久毛片亚洲| 亚洲深深色噜噜狠狠爱网站| 欧美韩一区二区| 宅男在线一区| 一区二区三区网站| 老司机精品视频在线播放| 亚洲国内欧美| 欧美亚洲自偷自偷| 日韩精品诱惑一区?区三区| 日韩在线a电影| 国产精品免费99久久久| av在线资源| 西西人体一区二区| 国产精品宾馆| 不卡一区综合视频| 911精品国产| 久久久五月天| 欧美中文高清| 激情综合自拍| 91欧美精品| 91精品国产自产在线观看永久∴ | 一区免费在线| 国产日本精品| 欧美日韩中文一区二区| 色婷婷成人网| 国产不卡av一区二区| 精品中文在线| 日韩国产一区| 国产视频欧美| 亚洲婷婷丁香| 国产日产精品_国产精品毛片| 国产欧美一级| 美女久久久久久| 超级白嫩亚洲国产第一| 国产精品成人a在线观看| 国产综合精品一区| 99在线精品免费视频九九视| 久久男女视频| 国产视频一区二区在线播放|