1.If目錄\spaml_init__。找到py,將導入並返回壹個常規包。
2.如果您找到directoryspam.ipy、pyc或其他模塊擴展},它將導致壹個簡單的模塊和
返回。
3.如果找到了目錄垃圾郵件文件夾,將會記錄下來,掃描將會搜索路徑中的下壹個文件夾。
目錄繼續。
4.如果以上都沒有找到,掃描將從搜索路徑中的下壹個目錄繼續。
如果在搜索路徑掃描之後,模塊或包沒有從上述步驟1和2返回,並且在上述步驟3中記錄了至少壹個路徑,則命名空間包將被創建。
命名空間包的創建將會立即發生,並且不會延遲,直到子級別的導入發生。新的名稱空間包有壹個_path_ attribute,設置為上面第3步掃描記錄的目錄路徑字符串的iterable對象,但是沒有_file_ attribute。
path_ attribute用於在後續更深入的訪問中搜索所有包組件。當請求進壹步的嵌套項時,將搜索名稱空間包的_path_中的每個記錄項,就像常規包的單獨路徑壹樣。
另壹方面,名稱空間包的_path_ attribute與較低級組件的關系與sys.path與頂層最左邊的包導入路徑的關系相同。名稱空間包成為訪問較低級別項目的“父路徑”,這種訪問也使用上述四個步驟。
最終結果是,命名空間包是多個目錄的虛擬連接,這些目錄可以位於多個sys.path項目中。但是,壹旦創建了名稱空間包,它和常規包在功能上就沒有區別了。它可以支持我們學過的常規包的所有功能,包括包的相對導入語法。