最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析Python中作用域的應(yīng)用

 更新時間:2023年08月30日 08:44:29   作者:python收藏家  
這篇文章主要是想和大家一起來討論下去Python中的命名空間、作用域和LEGB規(guī)則等不同概念,文中的示例代碼簡潔易懂,快跟隨小編一起來學(xué)習(xí)一下吧

什么是Python中的命名空間

python命名空間是一個容器,其中名稱映射到對象,它們用于避免在不同命名空間中存在相同名稱的情況下發(fā)生混淆。它們由模塊、函數(shù)、類等創(chuàng)建。

Python中的作用域是什么

作用域定義了必須搜索名稱空間以獲得名稱到對象(變量)的映射的層次順序。它是一個上下文,變量存在于其中,并從其中引用它們。它定義了變量的可訪問性和生存期。讓我們舉一個簡單的例子,如下所示:

pi = 'outer pi variable'
def print_pi():
    pi = 'inner pi variable'
    print(pi)
print_pi()
print(pi)

輸出

inner pi variable
outer pi variable

上面的程序給出了不同的輸出,因為相同的變量名pi駐留在不同的命名空間中,一個在函數(shù)print_pi中,另一個在上層。當(dāng)print_pi()被執(zhí)行時,'inner pi variable’被打印為函數(shù)命名空間內(nèi)的pi值。當(dāng)pi在外部命名空間中被引用時,輸出值“outer pi variable”。從上面的例子中,我們可以猜測,在決定從哪個命名空間中選擇變量時,肯定有一個遵循的規(guī)則。

Python中的作用域LEGB規(guī)則

在Python中,LEGB規(guī)則用于決定搜索命名空間以進(jìn)行作用域解析的順序。以下按層次結(jié)構(gòu)列出了范圍(從最高到最低/從最窄到最寬):

  • Local(L):定義在函數(shù)/類內(nèi)部
  • Enclosed(E):定義在封閉函數(shù)內(nèi)(嵌套函數(shù)概念)
  • Global(G):定義在全局(最上層)中
  • Built-in(B):Python內(nèi)置模塊中的保留名稱

Python中的局部作用域

局部作用域引用當(dāng)前函數(shù)中定義的變量。函數(shù)總是會首先在其局部作用域中查找變量名。只有當(dāng)它在那里沒有找到它時,才檢查外部范圍。

# Local Scope
pi = 'global pi variable'
def inner():
    pi = 'inner pi variable'
    print(pi)
inner()

輸出

inner pi variable

在運(yùn)行上面的程序時,內(nèi)部函數(shù)的執(zhí)行打印其局部(LEGB規(guī)則中的最高優(yōu)先級)變量pi的值,因為它在局部作用域中定義并可用。

局部和全局作用域

如果一個變量沒有在局部范圍中定義,則在更高的范圍中檢查它,在本例中是全局范圍。

# Global Scope
pi = 'global pi variable'
def inner():
    pi = 'inner pi variable'
    print(pi)
inner()
print(pi)

輸出

inner pi variable
global pi variable

因此,正如預(yù)期的那樣,程序在執(zhí)行inner()時打印出局部作用域中的值。這是因為它是在函數(shù)內(nèi)部定義的,這是變量被查找的第一個地方。全局范圍內(nèi)的pi值在第8行執(zhí)行print(pi)時打印。

局部、封閉和全局作用域

對于封閉的作用域,我們需要定義一個包含內(nèi)部函數(shù)的外部函數(shù),注釋掉內(nèi)部函數(shù)的局部pi變量,并使用nonlocal關(guān)鍵字引用pi。

# Enclosed Scope
pi = 'global pi variable'
def outer():
    pi = 'outer pi variable'
    def inner():
        # pi = 'inner pi variable'
        nonlocal pi
        print(pi)
    inner()
outer()
print(pi)

輸出

outer pi variable
global pi variable

當(dāng)outer()被執(zhí)行時,inner()和相應(yīng)的print函數(shù)被執(zhí)行,它們打印所包含的pi變量的值。第10行的語句在inner的局部作用域中查找變量,但在那里找不到它。由于pi是用nonlocal關(guān)鍵字引用的,這意味著pi需要從外部函數(shù)(即外部作用域)訪問。總而言之,pi變量在局部作用域中找不到,所以要查找更高的作用域。在封閉和全局作用域中都可以找到它。但是根據(jù)LEGB層次結(jié)構(gòu),即使我們在全局范圍中定義了一個變量,也會考慮封閉的范圍變量。

局部、封閉、全局和內(nèi)置作用域

最后的檢查可以通過從math模塊導(dǎo)入pi并注釋全局、封閉和局部pi變量來完成,如下所示:

# Built-in Scope
from math import pi
# pi = 'global pi variable'
def outer():
    # pi = 'outer pi variable'
    def inner():
        # pi = 'inner pi variable'
        print(pi)
    inner()
outer()

輸出

3.141592653589793

由于pi沒有在局部、封閉或全局作用域中定義,因此會查找內(nèi)置作用域,即從數(shù)學(xué)模塊導(dǎo)入的pi值。所以程序能夠在最外層范圍內(nèi)找到pi的值。

到此這篇關(guān)于淺析Python中作用域的應(yīng)用的文章就介紹到這了,更多相關(guān)Python作用域內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實現(xiàn)簡單的2048小游戲

    Python實現(xiàn)簡單的2048小游戲

    這篇文章主要為大家詳細(xì)介紹了Python實現(xiàn)簡單的2048小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Python如何實現(xiàn)FTP功能

    Python如何實現(xiàn)FTP功能

    在本篇文章里小編給大家整理的是關(guān)于Python實現(xiàn)的簡易FTP的實例內(nèi)容,有興趣的朋友們可以參考下。
    2020-05-05
  • 關(guān)于Python的高級數(shù)據(jù)結(jié)構(gòu)與算法

    關(guān)于Python的高級數(shù)據(jù)結(jié)構(gòu)與算法

    這篇文章主要介紹了關(guān)于Python的高級數(shù)據(jù)結(jié)構(gòu)與算法,掌握這些數(shù)據(jù)結(jié)構(gòu)和算法將幫助我們在實際編程中解決各種問題,提高我們的編程技巧和水平,需要的朋友可以參考下
    2023-04-04
  • centos安裝python3.10的教程

    centos安裝python3.10的教程

    文章主要介紹了在CentOS系統(tǒng)上安裝Python 3.10.1的步驟,包括升級OpenSSL到1.1.1,以及詳細(xì)的操作過程,如切換目錄、下載安裝包、解壓、配置、編譯安裝、創(chuàng)建軟連接和驗證等
    2025-03-03
  • Python中encode和encoding的區(qū)別小結(jié)

    Python中encode和encoding的區(qū)別小結(jié)

    encode和encoding在Python中雖然都與字符編碼相關(guān),但它們的角色和用途是不同的,本文主要介紹了Python中encode和encoding的區(qū)別小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Python如何定義有可選參數(shù)的元類

    Python如何定義有可選參數(shù)的元類

    這篇文章主要介紹了Python如何定義有可選參數(shù)的元類,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Python爬蟲入門案例之爬取去哪兒旅游景點攻略以及可視化分析

    Python爬蟲入門案例之爬取去哪兒旅游景點攻略以及可視化分析

    讀萬卷書不如行萬里路,學(xué)的扎不扎實要通過實戰(zhàn)才能看出來,本篇文章手把手帶你爬取去哪兒平臺的旅游景點攻略并進(jìn)行可視化分析,大家可以在過程中查缺補(bǔ)漏,看看自己掌握程度怎么樣
    2021-10-10
  • Python?async+request與async+aiohttp實現(xiàn)異步網(wǎng)絡(luò)請求探索

    Python?async+request與async+aiohttp實現(xiàn)異步網(wǎng)絡(luò)請求探索

    這篇文章主要介紹了Python?async+request與async+aiohttp實現(xiàn)異步網(wǎng)絡(luò)請求探索,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-10-10
  • Python實現(xiàn)批量獲取地址的經(jīng)緯度

    Python實現(xiàn)批量獲取地址的經(jīng)緯度

    在地理分析中,通常需要自己獲取經(jīng)緯度數(shù)據(jù),所以本文就來和大家介紹一下如何借助python與地圖接口來進(jìn)行經(jīng)緯度的爬取,感興趣的小伙伴可以了解下
    2025-05-05
  • Python閉包的使用方法

    Python閉包的使用方法

    這篇文章主要介紹了Python閉包的使用方法,當(dāng)返回的內(nèi)部函數(shù)使用了外部函數(shù)的變量就形成了閉包,下文更多相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-04-04

最新評論

通道| 左云县| 昌都县| 哈尔滨市| 沿河| 金门县| 嘉峪关市| 于田县| 云南省| 化州市| 宁津县| 金秀| 丰都县| 延寿县| 玉溪市| 台中市| 电白县| 沂水县| 新源县| 营口市| 宜章县| 田东县| 桑植县| 女性| 巍山| 兴山县| 石景山区| 谷城县| 盘山县| 丹寨县| 泾川县| 旺苍县| 固镇县| 张北县| 元朗区| 旺苍县| 普洱| 德清县| 平南县| 桐乡市| 上杭县|