關於python 的空的 init

2021-09-07 19:05:23 字數 1590 閱讀 8000

0、宣告,本篇只討論空__init__.py檔案的情況,不顧前提非得說__init__.py檔案裡面也可以寫東西的不在此討論了範圍之內,重點是個"空"字。

1、很多地方的資料夾都有__init__.py。網上一般都說,有了這個東西會把它當作乙個包,否則import這個資料夾會出錯。

但這就好像和說python檔案中如果有中文就要在開頭寫 # coding =utf8這句話一樣,說話囫圇吞棗不帶語境,導致誤會新手。

2、實際上空的__init__.py檔案在python3.3以上沒有卵的必要。

如果用python3.3以上在__init__.py中寫了內容,那要這個檔案還差不多,否則來個空的__init__.py基本上是多此一舉。就和在python3裡面寫# coding =utf8多此一舉一樣。

3、現在假設有這麼乙個目錄,裡面有:

乙個名叫pac的資料夾(裡面沒有__init__.py檔案)

乙個pac.py的檔案

乙個run.py檔案

在run.py裡面寫上 import pac,

3.1如果是python2,import pac實際上匯入 的是pac.py,如果刪除了pac.py那麼就會報錯,因為不能能import 乙個資料夾,python2只能匯入pac.py或者pac資料夾裡面有__init__.py這種情況,類似的你寫pac.txt  pac.ppt,寫個import pac也是不能匯入的,不認他。

3.2如果是python3,那麼import pac情況不一樣,import  pac到底匯入的是個啥?

需要分很多種情況,一種是pac資料夾裡面有__init__.py,一種是沒有__init__.py,一種是連pac資料夾都沒有,一種是你當前同級目錄下還有乙個叫pac.py的檔案,一種是沒這個pac.py的檔案,這一下子就多了五種情況了。

3.2.1當寫import pac時候,優先查詢有沒有pac資料夾裡面有__init__.py的這個資料夾,如果找到了,那麼此時的pac代表的是有__init__.py的pac資料夾(包)。

3.3.2如果3.2.1步驟沒找到,那麼再去查詢有沒有乙個叫pac.py的檔案,找到了那麼 pac就代表pac.py了。

3.2.3如果連pac.py都沒找到,就去找乙個資料夾,這個資料夾不包含__init__.py,如果找到了這個資料夾,那麼就會自動把這個資料夾當作包。

3.2.4如果執行3.2.3也沒找到pac,那麼就會報錯了,importerror: no module named pac

4.、總結一下,python2和python3的查詢順序差不多,但是python2少了3.2.3這一步,即在python2裡面如果只有pac資料夾,你就import pac那就會報錯。

有__init__.py的包,叫做regular packages ,常規包,python2只支援這個。

沒有__init__.py的包,叫做namespace package,命名空間包,python3.3以上支援這種。

namespace package這個東西是在pep420裡面新增的。

5、為了相容python2和3,那就有必要寫__init__.py;如果從不用python2,也不知道__init__.py裡面然來可以寫東西,只知道他是代表乙個資料夾是乙個包這乙個作用的人,那就不需要有這個檔案。

關於Python模組中 init

區分乙個含有python指令碼的資料夾和python包 可以執行import package操作的資料夾 的標誌就是看,這個資料夾下有沒有 ini py檔案,當乙個資料夾下有這個檔案,你可以進行匯入相關操作,但是如果這個資料夾沒有這個檔案,那麼python直譯器是沒有辦法去執行import操作的,直...

Python中關於空型別的判斷

在python中,none 空列表 空字典 空元組 0等一系列代表空和無的物件會被轉換成false。除此之外的其它物件都會被轉化成true。python變數初始化為空值分別是 數值digital value 0 字串str value 列表list value 字典ditc value 元組tupl...

python中的 init 的含義

上面的例子中,person是乙個類,init 是乙個特殊的方法 init是單詞初始化initialization的省略形式 在使用類建立物件之後被執行,用於給新建立的物件初始化屬性用。self.name name 就是初始化屬性的語句 init 是乙個方法,這個方法裡面有三個形參self name ...