2.2.1.8 Python命名空間和作用域_第1頁
2.2.1.8 Python命名空間和作用域_第2頁
2.2.1.8 Python命名空間和作用域_第3頁
2.2.1.8 Python命名空間和作用域_第4頁
2.2.1.8 Python命名空間和作用域_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Python命名空間和作用域大數(shù)據(jù)投融資管理任務(wù)1.1:Python基礎(chǔ)編程Python模塊一、命名空間變量是擁有匹配對象的名字(標識符)。命名空間是一個包含了變量名稱們(鍵)和它們各自相應(yīng)的對象們(值)的字典。每個函數(shù)都會有自己的命名空間,當變量出現(xiàn)在函數(shù)內(nèi)部時,Python默認其為局部變量,若存在一個與局部變量重名的全局變量,則由局部變量覆蓋全局變量。Python的命名空間分局部命名空間和全局命名空間。Python模塊命名空間一般有三種:①內(nèi)置命名空間(Built-innamespace):Python語言內(nèi)置的名稱,如函數(shù)名abs、char和異常名稱BaseException、Exception等。②全局命名空間(Globalnamespace):模塊中定義的名稱,記錄了模塊的變量,包括函數(shù)、類、Built-innamespace其他導(dǎo)入的模塊、模塊級的變量和常量。③局部命名空間(Localnamespace):函數(shù)中Globalnamespace定義的名稱,記錄了函數(shù)的變量,包括函數(shù)的參數(shù)和局部定義的變量(類中定義的也是如此)。(1)命名空間的類別Python模塊假設(shè)要使用變量chinazdap,則Python的查找順序為:局部命名空間→全局命名空間→內(nèi)置命名空間。如果找不到變量chinazdap,將放棄查找并引發(fā)一個NameError異常:NameError:name'chinazdap'isnotdefined。(2)命名空間查找順序Python模塊命名空間的生命周期取決于對象的作用域,如果對象執(zhí)行完成,則該命名空間的生命周期就結(jié)束。因此,我們無法從外部命名空間訪問內(nèi)部命名空間的對象。示例:#varl是全局名稱varl=7defsome_func():#var2是局部名稱var2=8defsome_inner_func():#var3是內(nèi)嵌的局部名稱var3=9(3)命名空間的生命周期Python模塊二、作用域作用域是作用范圍,是一個Python程序可以直接訪問命名空間的正文區(qū)域。按生效范圍可分為全局作用域和局部作用域。在一個Python程序中,直接訪問一個變量,會從內(nèi)到外依次訪問所有的作用域直到找到該變量,否則會報未定義的錯誤。在Python中,程序的變量并不是在哪個位置都可以被訪問的,訪問權(quán)限決定于這個變量是在哪里被賦值的。Python模塊定義在函數(shù)內(nèi)部的變量擁有一個局部作用域,定義在函數(shù)外的擁有全局作用域。局部變量只能在其被聲明的函數(shù)內(nèi)部被訪問,而全局變量可以在整個程序范圍內(nèi)被訪問。調(diào)用函數(shù)時,所有在函數(shù)內(nèi)聲明的變量名稱都將被加入到作用域中。(1)作用域的類別

變量的作用域決定了在哪一部分程序可以訪問哪個特定的變量。Python的作用域一共有4種。LocalEnclosingGlobalBuilt-inPython模塊(2)作用域的查找順序

Enclosing→Global→Built-in.在局部作用域找不到時,便會去局部作用域外的Enclosing去找,再找不到就會去全局作用域找,還是找不到再去內(nèi)置作用域中找。示例:g_count=0#全局作用域defouter():o_count=1#外部函數(shù)的本地作用域definner():i_count=2#局部作用域Python模塊內(nèi)置作用域是通過一個名為builtin的標準模塊來實現(xiàn)的,但是這個變量名自身并沒有放入內(nèi)置作用域內(nèi),所以必須導(dǎo)入這個文件才能夠使用它。在Python3.0中,可以使用以下的代碼來查看到底預(yù)定義了哪些變量:>>>importbuiltins>>>dir(builtins)Python中只有模塊(module),類(class)及函數(shù)(def、lambda)才會引入新的作用域,其他的代碼塊(如if/elif/else/、try/except、for/while等)是不會引入新的作用域的,也就是說這些語句內(nèi)定義的變量,外部也可以訪問,如下代碼:Python模塊>>>ifTrue:···

msg='IamfromRunoob'···>>>msg'IamfromRunoob'>>>示例中msg變量定義在if語句塊中,但外部還是可以訪問的。如果將msg定義在數(shù)中,則它就是局部變量,外部不能訪問:Python模塊>>>def

test():···

msg_inner='IamfromRunoob'···>>>msg_innerTraceback(mostrecentcalllast):File"<stdin>",line1,in<module>NameError:name'msg_inner'isnotdefined>>>從報錯的信息上看,說明msg_inner未被定義,無法使用,因為它是局部變量,只有在函數(shù)內(nèi)才可以使用。Python模塊三、命名空間和作用域的區(qū)別命名空間是比作

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論