當前位置:編程學習大全網 - 源碼下載 - Python命名空間包導入算法?

Python命名空間包導入算法?

要理解命名空間包,需要從底層學習Python 3.3中包導入操作是如何完成的。在導入過程中,與3.2版和之前的版本壹樣,3.3版仍將遍歷模塊搜索路徑sys.path中的每個目錄。但是,在3.3版中,當在每個模塊的搜索路徑中的目錄中搜索名為spam的引導包時,Python將按以下順序測試壹系列更廣泛的匹配條件:

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項目中。但是,壹旦創建了名稱空間包,它和常規包在功能上就沒有區別了。它可以支持我們學過的常規包的所有功能,包括包的相對導入語法。

  • 上一篇:眼鏡試戴小程序源代碼
  • 下一篇:廣安疫情溯源為奧密克戎BA2.2變異株,當地的疫情目前處於什麽階段?
  • copyright 2024編程學習大全網