国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中作用域的深入講解

2020-02-16 00:03:29
字體:
供稿:網(wǎng)友

前言

作用域是指變量的生效范圍,例如本地變量、全局變量描述的就是不同的生效范圍。

python的變量作用域的規(guī)則非常簡單,可以說是所有語言中最直觀、最容易理解的作用域。

在開始介紹作用域之前,先拋一個問題:

x=1def f(): x=3 g() print("f:",x) # 3def g(): print("g:",x) # 1f()print("main:",x) # 1

上面的代碼將輸出3、1、1。解釋參見再述作用域規(guī)則。另外,個人建議,本文最后一小節(jié)內(nèi)容盡量理解透徹。

python作用域規(guī)則簡介

它有4個層次的作用域范圍:內(nèi)部嵌套函數(shù)、包含內(nèi)部嵌套函數(shù)的函數(shù)自身、全局作用域、內(nèi)置作用域。上面4個作用域的范圍排序是按照從內(nèi)到外,從小到大排序的。

其中:

內(nèi)置作用域是預(yù)先定義好的,在__builtins__模塊中。這些名稱主要是一些關(guān)鍵字,例如open、range、quit等 全局作用域是文件級別的,或者說是模塊級別的,每個py文件中處于頂層的變量都是全局作用域范圍內(nèi)的變量 本地作用域是函數(shù)內(nèi)部屬于本函數(shù)的作用范圍,因為函數(shù)可以嵌套函數(shù),嵌套的內(nèi)層函數(shù)有自身的內(nèi)層范圍 嵌套函數(shù)的本地作用域是屬于內(nèi)層函數(shù)的范圍,不屬于外層

所以對于下面這段python代碼來說,如果它處于a.py文件中,且沒有嵌套在其它函數(shù)內(nèi):

X=1def out1(i): X=2 Y='a' print(X) print(i) def in1(n): print(n) print(X,Y) in1(3)out1(2)

那么:

處于全局作用域范圍的變量有:X、out1

處于out1本地作用域范圍的變量有:i、X、Y、in1

處于嵌套在函數(shù)out1內(nèi)部的函數(shù)in1的本地作用域范圍的變量有:n

注意上面的函數(shù)名out1和in1也是一種變量。

如下圖所示:

搜索規(guī)則

當(dāng)在某個范圍引用某個變量的時候,將從它所在的層次開始搜索變量是否存在,不存在則向外層繼續(xù)搜索。搜索到了,則立即停止。

例如函數(shù)ab()中嵌套了一個函數(shù)cd(),cd()中有一個語句print(x),它將首先檢查cd()函數(shù)的本地作用域內(nèi)是否有x,如果沒有則繼續(xù)檢查外部函數(shù)ab()的本地作用域范圍內(nèi)是否有x,如果沒有則再次向外搜索全局范圍內(nèi)的變量x,如果還是沒有,則繼續(xù)搜索內(nèi)置作用域,像"x"這種變量名,在內(nèi)置作用域范圍內(nèi)是不存在的,所以最終沒有搜索到,報錯。如果一開始在cd()中就已經(jīng)找到了變量x,就不會再搜索ab()范圍以及更外層的范圍。

所以,內(nèi)層范圍可以引用外層范圍的變量,外層范圍不包括內(nèi)層范圍的變量。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 盐津县| 马龙县| 卓资县| 深圳市| 瑞金市| 德化县| 同江市| 武邑县| 大埔区| 岑溪市| 松溪县| 宜昌市| 贺州市| 珲春市| 新宁县| 南部县| 苏尼特左旗| 乌兰县| 遂昌县| 隆回县| 浮山县| 宜春市| 平昌县| 广西| 江山市| 大宁县| 慈溪市| 荆州市| 珲春市| 平山县| 兴和县| 类乌齐县| 曲麻莱县| 阳春市| 鸡东县| 炉霍县| 林芝县| 高碑店市| 霞浦县| 多伦县| 健康|