python中__init__文件的运用_python中__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這一步,即如果只有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中__init__.py文件的作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java对象组合_java并发编程(三)
- 下一篇: python split返回类型_pyt