python包匯入的知識點

2021-10-01 11:51:14 字數 1216 閱讀 9758

目錄

包匯入的搜尋路徑

__init__檔案的作用

包內相對匯入

包匯入的搜尋路徑和python模組匯入的搜尋路徑和順序完全一樣,具體可以參看筆者的這篇文章。但是要注意的是,這裡的搜尋路徑指的是對最外層的那個包,例如from dir1.dir2 import mod語句,這裡的搜尋路徑指的是對dir1的搜尋路徑,這時是和python模組匯入的搜尋路徑和順序完全一致的;而對於包內的檔案或者包的匯入,便直接通過點號進行搜尋,在包匯入語句中,點號就相當於是目錄的層級結構的劃分,比如上述語句中dir2表示在dir1目錄下的乙個目錄,而mod.py則是dir2目錄下的乙個模組檔案。

在包匯入中,對被匯入的包,其目錄下必須要有__init__.py檔案,不然無法成功匯入,不僅被匯入包的目錄下要求有該檔案,如果對包內的其他目錄進行匯入,那麼其他目錄包內也必須有__init__.py檔案,比如對於from dir1.dir2 import mod語句,不僅dir1下必須要有__init__.py檔案,dir2目錄下也必須要有__init__.py檔案,這樣才可以成功匯入。

__init__.py檔案內可以寫任何python語句內容,並且在匯入的時候會執行該檔案;__init__.py檔案的作用主要有兩個:一是對包匯入做一些可能必要的初始化行為,因為在匯入包時會執行該檔案;二是該檔案會構建其所在目錄名稱的相應的命名空間物件,命名空間中的屬性就是該檔案中屬性。假如現在在dir1下有目錄dir2,檔案mod1.py和__init__.py檔案,那麼如果__init__.py檔案是乙個空檔案,這時import dir1後,由於__init__.py檔案是空的,所以dir1對應的命名空間中沒有屬性,所以如果想通過dir1.mod1去獲取mod1,會報錯;但是此時如果__init__.py檔案是如下內容,便會將mod1和dir2都初始化為dir1命名空間中的屬性,這時便可以通過dir1.mod1和dir1.dir2進行合法訪問。

from dir1 import mod1

from dir1 import dir2

我們知道,對於模組的匯入,是沒有相對匯入的,模組匯入的搜尋路徑和順序是嚴格按照sys.path中的路徑和順序進行的;但是對於包內模組檔案中的匯入語句,可以實現相對匯入,具體的方法是通過點號實現,如from . import module, from .. import module,這裡的單個點號表示從包內該模組檔案所在的目錄匯入module,雙點號表示從當前程式檔案所在目錄的上級目錄匯入module。

python大一知識點 python知識點複習

放假歸來,這幾天複習了一下好久不用的python,總結了一下知識點。語法基礎tuple與list的異同都由多個元素組成 tuple由 組成,list由組成 tuple不可變,list可變 tuple表示的是一種結構,而list表示的是多個事物的集合 tuple操作比list快 字串用法要點 轉義符和...

Python 知識點 閉包延遲繫結

在乙個函式內部定義另乙個函式,外部的函式為外函式,內部的函式為內函式,內函式裡運用了外函式的臨時變數,並且外函式的返回值是內函式的引用。這就形成了乙個閉包。通常情況下,乙個函式執行結束後,函式內部的所有東西都會被釋放掉,區域性變數也會消失。但是如果外函式在結束時發現自己的臨時變數會在內函式中用到時,...

python的知識點

while 迴圈語句和 for 迴圈語句使用 else 的區別 1 如果 else 語句和 while 迴圈語句一起使用,則當條件變為 false 時,則執行 else 語句。2.如果 else 語句和 for 迴圈語句一起使用,當 for 迴圈正常終止後則執行else語句!函式引數傳遞 值傳遞和指...