進口進一步混亂我不明白爲什麼以下運行(Python 2.7版),當一個模塊是不是因爲據我瞭解可以用Python
# \sound\formats\script.py
import formats.wavread
print formats.wavread.foo()
print formats.wavwrite.boo()
我的目錄結構是
進口sound\
__init__.py
formats\
__init__.py
script.py
wavread.py
wavwrite.py
__init__.py
都爲空。其餘的有下面的代碼
# \sound\formats\wavread.py
import wavwrite # <-- unused import
def foo():
return "read foo"
# \sound\formats\wavwrite.py
def boo():
return "write boo"
script.py
運行儘管模塊wavwrite.py
沒有在我的理解進口罰款。不過,我猜想當import formats.wavread
語句被執行時,它不知何故被導入,因爲在wavread.py
模塊中有import wavwrite
行。我的印象是,這個導入,import wavwrite
,完全沒用,但它會綁定到wavread
模塊的全局命名空間。因此,wavwrite.boo()
方法將超出範圍,並且從script.py
以內無法訪問。顯然它不能這樣工作。
從script.py
模塊的代碼中刪除子包裝前綴看起來會使程序按我的預期工作。因此,如果您運行以下
#\sound\formats\script.py
import wavread
print wavread.foo()
print wavwrite.boo()
將執行打印出來閱讀FOO的wavread.foo()
方法,並會在它下降的消息NameError: name 'wavwrite' is not defined
因爲預期wavwrite
模塊尚未導入下一行打一個錯誤。
究竟發生了什麼以及import formats.wavread
與import wavread
有什麼不同?