**平台的import麻煩點
Mac,Windows 平台下:檔案的名稱大小寫並不統一。
所以在這些平台之上,我們並無法保證 ECHO.PY 這個檔案應該被import成 echo, Echo 或 ECHO (例如,Windows 95 有一個惱人的特點,就是會自動把所有的檔案名稱第一個字元大寫)。
DOS的 8+3 檔名限制對長的module名稱
**定義__all__的必要性
如果沒有定義
__all__
的話, from Sound.Effects import *
這個敘述就 不會 從 Sound.Effects 這個package裡面import所有的module進入目前的命名空間(namespace)。唯一能保證的是 Sound.Effects 這個package有被imported 進來(可能會執行 __init__.py 裡面的初始化程式碼),並且這個package裡面所定義的名稱會被import進來。Package裡所定義的名稱包含了在 __init__.py 裡面所定義的名稱(以及所import的module)。當然也包含了在之前用import引進來的module名稱,例如: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
...
在這個例子裡,echo以及 surround 這兩個modules 都會被 import進來目前的命名空間(namespace)裡。這是因為當
from...import
這個敘述執行的時候,這兩個module都已經在這個package中有定義了(你也可以用 __all__
來定義)。值得注意的是使- 用import * 這樣的寫法常常是不被鼓勵的=>可讀性
-
from Package import specific_submodule
=>推薦使用的形式。 - 上面的 __init__.py 這個檔是必須要的=>避免直譯器誤認module
在__init__.py文件中定義__all__ = ["echo", "surround", "reverse"]
為使Python能把這個目錄架構當作是一個package,上面的 __init__.py 這個檔是必須要的。這是為了要避免有些檔案目錄的名字是很普通的名字(例如 "string" ),這會讓直譯器誤認正確的module名稱而找不到在搜尋路徑中的module。在最簡單的例子裡, __init__.py 可以是一個空的檔案。但是你也可以讓這個檔來做一些package初始化的動作,或者設定
__all__
這個變數(稍後會再提)。
沒有留言:
張貼留言