python中__init__文件的运用_python中__init__.py文件的作用
1、很多地方的文件夾都有__init__.py。網(wǎng)上一般都說,有了這個(gè)東西會(huì)把它當(dāng)作一個(gè)包,否則import這個(gè)文件夾會(huì)出錯(cuò)。
但這就好像和說python文件中如果有中文就要在開頭寫 # coding =utf8這句話一樣,說話囫圇吞棗不帶語境,導(dǎo)致誤會(huì)新手。
2、實(shí)際上空的__init__.py文件在python3.3以上沒有卵的必要。
如果用python3.3以上在__init__.py中寫了內(nèi)容,那要這個(gè)文件還差不多,否則來個(gè)空的__init__.py基本上是多此一舉。就和在python3里面寫# coding =utf8多此一舉一樣。
3、現(xiàn)在假設(shè)有這么一個(gè)目錄,里面有:
一個(gè)名叫pac的文件夾(里面沒有__init__.py文件)
一個(gè)pac.py的文件
一個(gè)run.py文件
在run.py里面寫上 import pac,
3.1如果是python2,import pac實(shí)際上導(dǎo)入 的是pac.py,如果刪除了pac.py那么就會(huì)報(bào)錯(cuò),因?yàn)椴荒苣躨mport 一個(gè)文件夾,python2只能導(dǎo)入pac.py或者pac文件夾里面有__init__.py這種情況,類似的你寫pac.txt ?pac.ppt,寫個(gè)import pac也是不能導(dǎo)入的,不認(rèn)他。
3.2如果是python3,那么import pac情況不一樣,import ?pac到底導(dǎo)入的是個(gè)啥?
需要分很多種情況,一種是pac文件夾里面有__init__.py,一種是沒有__init__.py,一種是連pac文件夾都沒有,一種是你當(dāng)前文件夾下還有一個(gè)叫pac.py的文件,一種是沒這個(gè)pac.py的文件,這一下子就多了五種情況了。
3.2.1當(dāng)寫import pac時(shí)候,優(yōu)先查找有沒有pac文件夾里面有__init__.py的這個(gè)文件夾,如果找到了,那么此時(shí)的pac代表的是有__init__.py的pac文件夾(包)。
3.3.2如果3.2.1步驟沒找到,那么再去查找有沒有一個(gè)叫pac.py的文件,找到了那么 pac就代表pac.py了。
3.2.3如果連pac.py都沒找到,就去找一個(gè)文件夾,這個(gè)文件夾不包含__init__.py,如果找到了這個(gè)文件夾,那么就會(huì)自動(dòng)把這個(gè)文件夾當(dāng)作包。
3.2.4如果執(zhí)行3.2.3也沒找到pac,那么就會(huì)報(bào)錯(cuò)了,ImportError: No module named pac
4.、總結(jié)一下,python2和python3的查找順序差不多,但是python2少了3.2.3這一步,即如果只有pac文件夾,你就import pac那就會(huì)報(bào)錯(cuò)。
有__init__.py的包,叫做Regular packages ,常規(guī)包,python2只支持這個(gè)。
沒有__init__.py的包,叫做Namespace package,命名空間包,python3.3以上支持這種。
Namespace package這個(gè)東西是在pep420里面新增的。
5、為了兼容python2和3,那就有必要寫__init__.py;如果從不用python2,也不知道__init__.py里面可以寫什么東西,只知道他是代表一個(gè)文件夾是一個(gè)包這一個(gè)作用的人,那就不需要有這個(gè)文件。
希望本文所述對(duì)大家程序設(shè)計(jì)有所幫助。
總結(jié)
以上是生活随笔為你收集整理的python中__init__文件的运用_python中__init__.py文件的作用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java对象组合_java并发编程(三)
- 下一篇: python split返回类型_pyt