1
爲什麼Python將導入的模塊附加到包中?我知道我不應該擔心這個,但只是想知道是否有任何解釋。在以下情況下,我的理解是導入logging
會將其添加到模塊名稱空間。那麼爲什麼要將它添加到包名稱空間呢?爲什麼python將導入的模塊附加到包中?
$ tree -I *.pyc
.
├── pkga
│ ├── __init__.py
│ └── modb.py
└── test.py
$ cat pkga/__init__.py
$
$ cat pkga/modb.py
import logging
import types
$ cat test.py
import pkga.modb
import pprint
import sys
pprint.pprint(sorted([ x for x in sys.modules.keys() if x.startswith("pkg")]))
$ python test.py
['pkga', 'pkga.logging', 'pkga.modb', 'pkga.types']
但是爲什麼它包含'pkga.logging'和'pkga.types'而不是'logging'和'types'? – 2012-02-09 07:29:02
@ IgnacioVazquez-Abrams保留名稱空間。如果另一個模塊實現了一個名爲'logging'的類或函數,那麼應用程序可能會因混亂而崩潰 – vikki 2012-02-09 07:39:49
@ IgnacioVazquez-Abrams我認爲vikki是正確的。如果在'pkga'下創建'logging.py','sys.modules'將具有相同的密鑰,但'pkga.logging'將是一個完全不同的模塊。 – jcollado 2012-02-09 07:45:15