假設你想設計一個模組集(也就是一個python包)來統一處理音效檔和聲音資料。通常由它們的擴充有不同的聲音格式,例如:WAV,AIFF,AU),所以你可能需要建立和維護一個不斷增長的各種檔案格式之間的轉換的模組集合。並且可能要執行聲音資料處理(如混合,添加回聲,應用平衡功能),所以你寫一個永無止境的流模組來執行這些操作:模組設計的包如下:
sound/ Top-level package
__init__.py Initialize the sound package
formats/ Subpackage for file format conversions
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
...
effects/ Subpackage for sound effects
__init__.py
echo.py
surround.py
reverse.py
...
filters/ Subpackage for filters
__init__.py
equalizer.py
vocoder.py
karaoke.py
...
當匯入包以後,Python通過sys.path中的目錄來尋找包的子目錄。 每一個包都必須有__init__.py檔案,這樣做是為了防止某些目錄有一個共同的名字。在最簡單的情況下,__ init__.py可以只是一個空檔案,但它也可以執行包的初始化代碼,包括設定__all__變數,稍後介紹。 我們可以從包中匯入單個模組,
例如: import sound.effects.echo 這會載入子模組sound.effects.echo。它必須引用全名。 sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
另外一種匯入子模組的方法: from sound.effects import echo 這樣就載入了echo子模組,沒有包括包的首碼,因此它可以用作如下: echo.echofilter(input, output, delay=0.7, atten=4)
或者可以from sound.effects.echo import echofilter echofilter(input, output, delay=0.7, atten=4)
請注意,如果你使用包匯入一個子模組(或子包),像一個函數,類或變數。 import語句首先測試匯入的對象是否包中定義,如果沒有,它假定這是一個模組,並嘗試載入它。如果還沒有找到,則會引發一個ImportError異常。