包是一種管理 Python 模塊命名空間的形式,采用點模塊名稱。比如一個模塊的名稱是 A.B, 那么他表示一個包 A中的子模塊 B 。
10余年的寬城網站建設經驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。網絡營銷推廣的優(yōu)勢是能夠根據用戶設備顯示端的尺寸不同,自動調整寬城建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“寬城網站設計”,“寬城網站推廣”以來,每個客戶項目都認真落實執(zhí)行。就好像使用模塊的時候,你不用擔心不同模塊之間的全局變量相互影響一樣,采用點模塊名稱這種形式也不用擔心不同庫之間的模塊重名的情況。
這樣不同的作者都可以提供 NumPy 模塊,或者是 Python 圖形庫。不妨假設你想設計一套統(tǒng)一處理聲音文件和數據的模塊(或者稱之為一個包)。
現存很多種不同的音頻文件格式(基本上都是通過后綴名區(qū)分的,例如: .wav,:file:.aiff,:file:.au,),所以你需要有一組不斷增加的模塊,用來在不同的格式之間轉換。
并且針對這些音頻數據,還有很多不同的操作(比如混音,添加回聲,增加均衡器功能,創(chuàng)建人造立體聲效果),所以你還需要一組怎么也寫不完的模塊來處理這些操作。
這里給出了一種可能的包結構(在分層的文件系統(tǒng)中):
在導入一個包的時候,Python 會根據 sys.path 中的目錄來尋找這個包中包含的子目錄。
目錄只有包含一個叫做 __init__.py 的文件才會被認作是一個包,主要是為了避免一些濫俗的名字(比如叫做 string)不小心的影響搜索路徑中的有效模塊。
最簡單的情況,放一個空的 :file:__init__.py就可以了。當然這個文件中也可以包含一些初始化代碼或者為(將在后面介紹的) __all__變量賦值。
用戶可以每次只導入一個包里面的特定模塊,比如:
這將會導入子模塊:sound.effects.echo。 他必須使用全名去訪問:
還有一種導入子模塊的方法是:
這同樣會導入子模塊: echo,并且他不需要那些冗長的前綴,所以他可以這樣使用:
還有一種變化就是直接導入一個函數或者變量:
同樣的,這種方法會導入子模塊: echo,并且可以直接使用他的 echofilter() 函數:
注意當使用 from package import item 這種形式的時候,對應的 item 既可以是包里面的子模塊(子包),或者包里面定義的其他名稱,比如函數,類或者變量。
import 語法會首先把 item 當作一個包定義的名稱,如果沒找到,再試圖按照一個模塊去導入。如果還沒找到,拋出一個 :exc:ImportError 異常。
反之,如果使用形如 import item.subitem.subsubitem 這種導入形式,除了最后一項,都必須是包,而最后一項則可以是模塊或者是包,但是不可以是類,函數或者變量的名字。