国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python基礎知識之函數(shù)初階——命名空間

dack / 3310人閱讀

摘要:在內(nèi)置命名空間不能使用全局和局部的名字。可以形象地理解成內(nèi)置命名空間具有最高級別,不需要定義就可以使用,全局命名空間次之,最低級是局部命名空間。

python中的命名空間分三種: 內(nèi)置的命名空間,在啟動解釋器的時候自動加載進內(nèi)存的各種名字所在的空間,比如print,input等不需要定義就可以使用的名字 全局命名空間,就是從上到下所有我們定義的變量名和函數(shù)名所在的空間,是在程序從上到下被執(zhí)行的過程中加載進內(nèi)存的。 局部命名空間,比如函數(shù)在執(zhí)行時所開辟的空間,里面存放了函數(shù)內(nèi)部定義的各種名字,隨著函數(shù)執(zhí)行結(jié)束 這個局部命名空間就消失了。 在局部命名空間可以使用全局和內(nèi)置命名空間中的名字 在全局命名空間可以使用內(nèi)置命名空間中的名字,但不能使用局部命名空間的。 在內(nèi)置命名空間不能使用全局和局部的名字。 可以形象地理解成內(nèi)置命名空間具有最高級別,不需要定義就可以使用,全局命名空間次之,最低級是局部命名空間。 當?shù)图壝臻g使用名字時首先會在自身的命名空間里查找,如果有就使用,沒有的話就到上一級命名空間內(nèi)查找,如果有就使用,沒有就繼續(xù)到更上一級空間內(nèi)查找,直到頂層的內(nèi)置命名空間,如果有就使用,沒有則會報錯。 舉個例子如下:
num = 1 #這是全局命名空間內(nèi)定義的num = 1
def func1(): #這個函數(shù)會創(chuàng)建一個局部命名空間1
    num = 2  #這是在局部命名空間1定義的num = 2
    def func2(): #這個函數(shù)會創(chuàng)建一個局部命名空間2
        num = 3 #這是在局部命名空間2 內(nèi) 定義的num = 3
        print(num) #這是在局部命名空間2內(nèi) 使用num 變量
    func2() # 調(diào)用函數(shù)func2時 會執(zhí)行該命令創(chuàng)建局部命名空間2
func1()  #調(diào)用函數(shù)func1時會創(chuàng)建局部命名空間1,
#這幾個命名空間的級別順序是:內(nèi)置>全局>局部1>局部2
#當print(num)指令執(zhí)行時它會在局部2內(nèi)查找是否有num,發(fā)現(xiàn)有則直接引用,如果沒有則會到上一級(局部1)中查找,局部1沒有則繼續(xù)到上一級(全局)查找

再看一個例子:

#max()函數(shù)是內(nèi)置的函數(shù),如果我們在全局命名空間中定義了函數(shù)名為max的函數(shù)時,則該函數(shù)就失效了,也就是說在自身空間內(nèi)找到了max()后就不去內(nèi)置命名空間查找了
def max(a,b,c):
    return "max失效了?"
print(max(1,2,3))#
正常情況下應該輸出3(max函數(shù)功能是返回最大值),但是因為我們把max這個名字占用了,所以當使用時程序就不去上一級空間(內(nèi)置命名空間)去查找了

與命名空間有關的兩個函數(shù)globals()和locals()
可以用globals()查看全局命名空間的所有定義的名字
可以用locals()查看當前命名空間的所有定義的名字,在全局則返回全局,在局部則返回局部
這兩個函數(shù)的返回值可以看作是字典,格式都是{key1:value1,key2:value2,.....}

當函數(shù)1內(nèi)嵌套函數(shù)2時,對于函數(shù)1內(nèi)的不可變數(shù)據(jù)類型的變量,函數(shù)2內(nèi)可以引用,但不可修改

def func1():
    a = 1
    def func2():
        a = a + 1 
#此處會報一個嚴重錯誤,因為a同時出現(xiàn)在等號兩邊,Python會先執(zhí)行等號右邊的表達式,
#發(fā)現(xiàn)你在引用a,然后它會先在本空間查找a,結(jié)果找到了等號左邊的a,其結(jié)果就是“在定義變量前引用變量”
        pass      
    func2()
func1()
#如果想要修改,可以使用nonlocal(python3中新增)
def func1():
    a = 1
    def func2():
        nonlocal a
        a = a + 1
    func2()
    print(a) 
func1()
#我們可以看出,執(zhí)行func2()后再輸出a,a已經(jīng)變成2了
    2
nonlocal只能作用于局部變量,當使用后它會自動查找上一級局部命名空間是否有該變量,如果沒有繼續(xù)向上查找,直到最上一級“局部命名空間”

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/42576.html

相關文章

  • python基礎知識函數(shù)初階——閉包

    摘要:我們說觸發(fā)了閉包的函數(shù)叫做閉包函數(shù)閉包最大的特點就是它可以被外層函數(shù)返回后賦值給一個變量,并且攜帶了外層函數(shù)內(nèi)定義的變量例子如下變量為函數(shù)開辟的局部命名空間內(nèi)定義的變量函數(shù)內(nèi)引用了變量的內(nèi)層函數(shù)名被當作返回值,此時閉包規(guī)則達成。 什么是閉包? 其實我們在使用函數(shù)過程中不經(jīng)意間就會觸發(fā)閉包,因為總會出于某種原因會在函數(shù)內(nèi)引用或修改上一層函數(shù)的變量,這時就會觸發(fā)閉包 那么什么是閉包?其實就...

    TIGERB 評論0 收藏0
  • 【C++初階】 關鍵字,命名空間,缺省參數(shù),IO和函數(shù)重載

    摘要:事實上語言當中有的內(nèi)容,比如函數(shù)循環(huán)結(jié)構體宏等等內(nèi)容,也都有,所以大家千萬不要認為語言白學了哈因為之前已經(jīng)完整更新過語言的博客有需要可以往前翻,所以這里直接介紹相對語言當中新增的內(nèi)容,而本章引入的內(nèi)容是的關鍵字命名空間缺省參數(shù)函數(shù)重載。 ...

    winterdawn 評論0 收藏0
  • python基礎知識函數(shù)初階——參數(shù)詳解

    摘要:定義函數(shù)中的函數(shù)使用關鍵字定義,格式為函數(shù)名形參函數(shù)語句塊函數(shù)名只能包含字符串下劃線和數(shù)字且不能以數(shù)字開頭。所以默認參數(shù)還是放在后面合適。 定義函數(shù) python中的函數(shù)使用關鍵字 def 定義,格式為: def 函數(shù)名(形參): 函數(shù)語句塊 函數(shù)名只能包含字符串、下劃線和數(shù)字且不能以數(shù)字開頭。函數(shù)的形參分為:位置參數(shù)、默認參數(shù)(自帶默認值的參數(shù))、動態(tài)參數(shù)return是關鍵字...

    Rindia 評論0 收藏0
  • 【C++】初窺門徑---入門篇

    摘要:在大型的工程中,自己定義的變量函數(shù),類名與其他人定義的相沖突等問題。使用標準輸出控制臺和標準輸入鍵盤時,必須包含頭文件以及標準命名空間。缺省參數(shù)概念缺省參數(shù)是聲明或定義函數(shù)時為函數(shù)的參數(shù)指定一個默認值。 目錄 前言 1.命名空間 1.1命名空間定義 1.2 命名空間使用 2. C++的輸入和...

    不知名網(wǎng)友 評論0 收藏0
  • python基礎教程:作用域和命名空間

    摘要:正如我們前面舉的張三的例子那樣,不同命名空間中的名稱之間沒有任何關系。作用域作用域,是一個命名空間可直接發(fā)放完的代碼的文本區(qū)域。刪除也是如此,語句會從局部命名空間的引用中移除對的綁定。 命名空間和作用域的概念我們之前也提到過,比如內(nèi)置函數(shù)globals(),函數(shù)中變量的作用域,模塊使用的import等等。這些可能讓我們對這兩個概念有了大致的理解。本節(jié)再詳細探討一下。 showImg(h...

    wangzy2019 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<