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

Python命名空間namespace及作用域原理解析

 更新時(shí)間:2020年06月05日 09:25:19   作者:落日峽谷  
這篇文章主要介紹了Python命名空間namespace及作用域原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

曾經(jīng)學(xué)C++的時(shí)候,經(jīng)常聽到這個(gè)名詞,它主要是為了避免命名沖突而產(chǎn)生的。

就像有A(4個(gè)蘋果),B(6個(gè)蘋果)兩個(gè)人,10個(gè)蘋果,如果只標(biāo)簽了蘋果,你無(wú)法判斷哪個(gè)蘋果是屬于哪個(gè)人的,因?yàn)闃?biāo)簽都是一樣的;但是如果標(biāo)簽是A.蘋果,B.蘋果,那么是不是很容易就知道了蘋果是誰(shuí)的了。

命名空間:提供了一種從名稱到對(duì)象的映射;主要是通過字典來(lái)實(shí)現(xiàn)的。

在python中,函數(shù)、模塊等都有自己的命名空間:

局部命名空間(local namespace):即函數(shù)中定義的名稱 —— 包括函數(shù)中的變量、參數(shù)、局部變量等;

全局命名空間(global namespace):即模塊中定義的名稱 —— 包括模塊中的變量、函數(shù)、類、參數(shù)、常量、導(dǎo)入(import)的模塊等;

內(nèi)置命名空間(built-in namespace):即python內(nèi)置的名稱 —— 包括各種內(nèi)置函數(shù)、Exception等;

而,當(dāng)python需要使用變量時(shí),會(huì)在上述命名空間中依次查找,順序是:

局部命名空間,全局命名空間、內(nèi)置命名空間。

同一命名空間中不能有重名,但不同命名空間可以。

可以通過locals()、globals() 函數(shù)來(lái)獲取命名空間的值(字典),在程序的不同位置執(zhí)行結(jié)果不一定一致,因?yàn)榻Y(jié)果是針對(duì)當(dāng)前位置來(lái)說的。

locals()

globals()

可以通過字典形式獲取其中的值:

作用域:可以理解為變量所起作用的范圍,超出范圍則某變量不能被使用。在python 程序中,直接訪問一個(gè)變量,會(huì)從內(nèi)到外依次訪問所有的作用域直到找到,否則報(bào)錯(cuò)。Python 中只有模塊(module),類(class)以及函數(shù)(def、lambda)才會(huì)產(chǎn)生新的作用域,其它的代碼塊(如 if/elif/else/、try/except、for/while等)是不會(huì)產(chǎn)生新的作用域的。

作用域可以分為四種:

Local:最內(nèi)層,包含局部變量,一般指的是函數(shù)內(nèi)部的作用域;

Enclosing:包含非局部但是也不是全局的變量,主要是嵌套時(shí),外層函數(shù)的變量,那么相對(duì)內(nèi)層函數(shù)來(lái)說,嵌套的外層函數(shù)中的變量既不是局部變量也不是全局變量。

Global:全局變量,例如當(dāng)前模塊中的全局變量。

Build-in:內(nèi)置變量。

查找順序一般是:Local--->Enclosing--->Global--->Build-in

def test1():
  x1 = 1    #Enclosing 作用域
  def test2():
    x2 = 1  #Local 作用域
    print('x2=',x2)
    x1 = 100 #很明顯,外層作用域中的x1沒有受到影響,因?yàn)檫@里的x1屬于Local
    
  test2()
  return x1

aa = test1()
print('aa=',aa)

要想修改外層作用域(上層)的變量,需要用到global和nonlocal關(guān)鍵字。(注意,修改和訪問不是一樣的程度)

def test1():
  x1 = 1    #Enclosing 作用域
  def test2():
    x2 = 1  #Local 作用域
    print('x2=',x2)
    
    nonlocal x1
    x1 = 100 #通過nonlocal,將這里的x1作用域變化為Enclosing作用域,即影響到Enclosing作用域中的x1的值
    
  test2()
  return x1
aa = test1()
print('aa=',aa)

def test1():
  x1 = 1    # 這個(gè)x1屬于Enclosing 作用域
  def test2():
    x2 = 1  #Local 作用域
    print('x2=',x2)
    
    global x1  # 這個(gè)x1屬于全局作用域
    x1 = 100 #這里影響的是全局作用域中的x1值,并不會(huì)影響到Enclosing作用域中的值
    
  test2()
  return x1  #返回的是當(dāng)前作用域Enclosing中的x1的值

aa = test1()
print('aa=',aa)
print('x1=',x1)

全局變量和局部變量

定義在函數(shù)內(nèi)部的變量,擁有局部作用域,屬于局部變量。

定義在函數(shù)外部的變量,擁有全局作用域,屬于全局變量。

全局變量可以在整個(gè)全局作用域內(nèi)訪問,但是要修改的話,需要用到global關(guān)鍵字。

更細(xì)節(jié)一點(diǎn),若涉及到class:

全局變量:一般在模塊內(nèi)、在所有函數(shù)外面、在class外面的變量。

局部變量:一般在函數(shù)內(nèi)、在class的方法內(nèi)(未加self修飾)的變量。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python每天定時(shí)運(yùn)行某程序代碼

    python每天定時(shí)運(yùn)行某程序代碼

    這篇文章主要介紹了python每天定時(shí)運(yùn)行某程序代碼,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Numpy維度知識(shí)總結(jié)

    Numpy維度知識(shí)總結(jié)

    這篇文章主要介紹了Numpy維度知識(shí)總結(jié),因?yàn)樵趎umpy里一維既可以做行向量也可以做列向量,那對(duì)于任意一個(gè)給定的一維向量,我們就無(wú)法確定他到底是行向量還是列向量,為了防止這種尷尬的境地,習(xí)慣上用二維矩陣而不是一維矩陣來(lái)表示行向量和列向量,需要的朋友可以參考下
    2023-09-09
  • 解決Python中字符串和數(shù)字拼接報(bào)錯(cuò)的方法

    解決Python中字符串和數(shù)字拼接報(bào)錯(cuò)的方法

    相信很多的新手朋友都會(huì)碰到python連接字符串和數(shù)字的問題,因?yàn)閜ython是強(qiáng)類型的語(yǔ)言,如果你把一個(gè)字符串和數(shù)字直接做連接的操作的話,就會(huì)直接報(bào)錯(cuò)的,今天就給大家說下字符串和數(shù)字拼接的問題,有需要的朋友們可以參考借鑒。
    2016-10-10
  • Pandas常用的數(shù)據(jù)結(jié)構(gòu)和常用的數(shù)據(jù)分析技術(shù)

    Pandas常用的數(shù)據(jù)結(jié)構(gòu)和常用的數(shù)據(jù)分析技術(shù)

    Pandas是Python中用于數(shù)據(jù)處理和分析的強(qiáng)大庫(kù),其最常用的數(shù)據(jù)結(jié)構(gòu)是Series和DataFrame。Series類似于一維數(shù)組,可以表示一列數(shù)據(jù);DataFrame類似于二維表格,可以表示多列數(shù)據(jù)
    2023-04-04
  • Python機(jī)器學(xué)習(xí)之SVM支持向量機(jī)

    Python機(jī)器學(xué)習(xí)之SVM支持向量機(jī)

    這篇文章主要為大家詳細(xì)介紹了Python機(jī)器學(xué)習(xí)之SVM支持向量機(jī),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • python上下文管理的使用場(chǎng)景實(shí)例講解

    python上下文管理的使用場(chǎng)景實(shí)例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于python上下文管理的使用場(chǎng)景實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-03-03
  • Python中os模塊的使用及文件對(duì)象的讀寫詳解

    Python中os模塊的使用及文件對(duì)象的讀寫詳解

    這篇文章主要介紹了Python中os模塊的使用及文件對(duì)象的讀寫詳解,Python?open()?方法用于打開一個(gè)文件,并創(chuàng)建返回文件對(duì)象,在對(duì)文件進(jìn)行處理過程都需要使用到這個(gè)函數(shù),如果該文件無(wú)法被打開,會(huì)拋出?OSError,需要的朋友可以參考下
    2023-08-08
  • Python元類編程實(shí)現(xiàn)一個(gè)簡(jiǎn)單的ORM

    Python元類編程實(shí)現(xiàn)一個(gè)簡(jiǎn)單的ORM

    本文主要介紹了Python元類編程實(shí)現(xiàn)一個(gè)簡(jiǎn)單的ORM,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python中if __name__ == ''__main__''作用解析

    Python中if __name__ == ''__main__''作用解析

    這篇文章主要介紹了Python中if __name__ == '__main__'作用解析,這斷代碼在Python中非常常見,它有作用?本文就解析了它的作用,需要的朋友可以參考下
    2015-06-06
  • python數(shù)據(jù)分析之如何刪除value=0的行

    python數(shù)據(jù)分析之如何刪除value=0的行

    這篇文章主要給大家介紹了關(guān)于python數(shù)據(jù)分析之如何刪除value=0的行的相關(guān)資料,文中通過實(shí)例代碼以及圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-12-12

最新評(píng)論

措美县| 大埔县| 巧家县| 应城市| 邓州市| 万安县| 阿合奇县| 探索| 临湘市| 宜阳县| 阳原县| 孟津县| 班玛县| 云和县| 弥勒县| 鄂伦春自治旗| 房山区| 资阳市| 横山县| 烟台市| 理塘县| 保定市| 光泽县| 洛南县| 大港区| 彭泽县| 南安市| 桓台县| 遂宁市| 安龙县| 阿图什市| 曲周县| 高尔夫| 萨嘎县| 佛坪县| 曲松县| 博罗县| 新巴尔虎右旗| 民县| 达拉特旗| 花莲县|