欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

什么是Python中的命名空間

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

Python中的作用域是什么

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

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

輸出

inner pi variable
outer pi variable

上面的程序給出了不同的輸出,因?yàn)橄嗤淖兞棵鹥i駐留在不同的命名空間中,一個(gè)在函數(shù)print_pi中,另一個(gè)在上層。當(dāng)print_pi()被執(zhí)行時(shí),'inner pi variable’被打印為函數(shù)命名空間內(nèi)的pi值。當(dāng)pi在外部命名空間中被引用時(shí),輸出值“outer pi variable”。從上面的例子中,我們可以猜測,在決定從哪個(gè)命名空間中選擇變量時(shí),肯定有一個(gè)遵循的規(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)它在那里沒有找到它時(shí),才檢查外部范圍。

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

輸出

inner pi variable

在運(yùn)行上面的程序時(shí),內(nèi)部函數(shù)的執(zhí)行打印其局部(LEGB規(guī)則中的最高優(yōu)先級)變量pi的值,因?yàn)樗诰植孔饔糜蛑卸x并可用。

局部和全局作用域

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

# 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í)打印出局部作用域中的值。這是因?yàn)樗窃诤瘮?shù)內(nèi)部定義的,這是變量被查找的第一個(gè)地方。全局范圍內(nèi)的pi值在第8行執(zhí)行print(pi)時(shí)打印。

局部、封閉和全局作用域

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

局部、封閉、全局和內(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)文章

  • Django視圖類型總結(jié)

    Django視圖類型總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于Django視圖類型的總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-02-02
  • Python的Scrapy框架中的CrawlSpider介紹和使用

    Python的Scrapy框架中的CrawlSpider介紹和使用

    這篇文章主要介紹了Python的Scrapy框架中的CrawlSpider介紹和使用,CrawlSpider其實(shí)是Spider的一個(gè)子類,除了繼承到Spider的特性和功能外,還派生除了其自己獨(dú)有的更加強(qiáng)大的特性和功能,其中最顯著的功能就是"LinkExtractors鏈接提取器",需要的朋友可以參考下
    2023-12-12
  • Python中操作PDF文件的常用方法

    Python中操作PDF文件的常用方法

    在 Python 中操作 PDF 文件的常用方法是使用專門的第三方庫,這些庫可以幫助你完成常見的操作,如讀取 PDF 內(nèi)容、提取文本、合并和拆分 PDF 文件、修改文件等,常用的庫包括 PyPDF2、pdfminer、reportlab 等,下面是一些常見任務(wù)的示例,需要的朋友可以參考下
    2025-02-02
  • Python腳本實(shí)現(xiàn)監(jiān)聽服務(wù)器的思路代碼詳解

    Python腳本實(shí)現(xiàn)監(jiān)聽服務(wù)器的思路代碼詳解

    這篇文章主要介紹了Python腳本實(shí)現(xiàn)監(jiān)聽服務(wù)器的思路,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Python中enumerate函數(shù)代碼解析

    Python中enumerate函數(shù)代碼解析

    這篇文章主要介紹了Python中enumerate函數(shù)代碼解析,涉及函數(shù)說明以及相關(guān)示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Python argparse模塊實(shí)現(xiàn)解析命令行參數(shù)方法詳解

    Python argparse模塊實(shí)現(xiàn)解析命令行參數(shù)方法詳解

    argparse 是 python 自帶的命令行參數(shù)解析包,可以用來方便的服務(wù)命令行參數(shù)。本文將通過示例和大家詳細(xì)講講argparse的使用,需要的可以參考一下
    2022-09-09
  • Python中解決schedule模塊安裝與使用問題的完整指南

    Python中解決schedule模塊安裝與使用問題的完整指南

    在 Python 開發(fā)中,定時(shí)任務(wù)是一個(gè)非常常見的需求,schedule 是一個(gè)輕量級的 Python 庫,專門用于簡化定時(shí)任務(wù)的實(shí)現(xiàn),本文將圍繞 schedule 模塊的安裝與使用進(jìn)行詳細(xì)介紹,希望對大家有所幫助
    2025-03-03
  • django中上傳圖片分頁三級聯(lián)動效果的實(shí)現(xiàn)代碼

    django中上傳圖片分頁三級聯(lián)動效果的實(shí)現(xiàn)代碼

    這篇文章主要介紹了django中上傳圖片分頁三級聯(lián)動效果的實(shí)現(xiàn)代碼,非常不錯,具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2019-08-08
  • 用python登錄Dr.com思路以及代碼分享

    用python登錄Dr.com思路以及代碼分享

    如今一般的大學(xué)校園或者公寓都是通過客戶端來限制路由器使用,基本上都是Dr.com客戶端,有的是登錄樣式,有的是插件樣式。下面我們來說說python定制自己的客戶端
    2014-06-06
  • 對python中 math模塊下 atan 和 atan2的區(qū)別詳解

    對python中 math模塊下 atan 和 atan2的區(qū)別詳解

    今天小編就為大家分享一篇對python中 math模塊下 atan 和 atan2的區(qū)別詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01

最新評論