碼農(nóng)阿勇 2020-02-28 19:51:00 詳解python包中的__init__.py 1,、 包與模塊,,類,函數(shù)之間的關(guān)系 隨著互聯(lián)網(wǎng)和IOT的發(fā)展,,我們?cè)谙硎苘浖膹?qiáng)大和智能的同時(shí),,其背后與之對(duì)應(yīng)的代碼規(guī)模也越來越大。因此我們無法將所有的功能代碼塊都放在一個(gè)文件中去,。于是我們根據(jù)功能進(jìn)行拆分為一個(gè)個(gè)模塊進(jìn)行組織,。當(dāng)模塊很多的時(shí)候,為了便于模塊管理和防止模塊重名,,又引入了一個(gè)比模塊更大的容器(包)來組織模多個(gè)塊,。 其實(shí)python的程序我們可以理解為有包,模塊和模塊中的函數(shù)和類組成,。它們之間的關(guān)系如下圖所示: 2,、 如何創(chuàng)建一個(gè)包 創(chuàng)建一個(gè)包其實(shí)很簡(jiǎn)單,你只需要?jiǎng)?chuàng)建一個(gè)空的文件夾,,然后在這個(gè)文件夾中放一個(gè)名為__init__.py這樣的模塊,,里邊什么都不用寫。 這樣一個(gè)包就成了,。例如我在D盤跟目錄下創(chuàng)建一個(gè)名為mypkg的包如下圖所示,。 注意包中的__init__.py這個(gè)模塊不能少,否則就成文件夾了,。其實(shí)本質(zhì)上來講包就是個(gè)文件夾,。如果在pycharm中創(chuàng)建包更簡(jiǎn)單,直接在當(dāng)前的工程名上點(diǎn)擊右鍵,,選擇new菜單,,然后選擇python package即可,如下圖所示,。 3,、 如何使用一個(gè)包中的模塊 包中只有存放模塊,包才有意義,,在包外的主程序模塊如何調(diào)用包中模塊中的函數(shù)或類那,?其實(shí)也是通過import關(guān)鍵字來實(shí)現(xiàn)的。 第一種導(dǎo)入方法如下圖所示: 第二種導(dǎo)入方法如下圖所示: 通過包名就可以有效的防止模塊重名,。 4,、 包中的__init__.py模塊有啥用 1、它的第一個(gè)作用就是用來識(shí)別它是一個(gè)包還是一個(gè)文件夾的作用,。 2,、可以用來做批量導(dǎo)入。 首先我在__init__.py中寫入如下代碼 然后我在test_module.py中可以不寫導(dǎo)入random和re模塊的導(dǎo)入語句,,直接調(diào)用模塊中的函數(shù)如下圖所示: 其實(shí)import后跟包名,,其實(shí)導(dǎo)入的是__init__.py模塊,,也就是說在導(dǎo)入時(shí)會(huì)自動(dòng)執(zhí)行包中的__init__.py模塊中的代碼。 3,、當(dāng)然也可以把__init__.py當(dāng)做一個(gè)普通模塊來使用,,但是一般不推薦這樣用。 在__init__.py中定義一個(gè)函數(shù)test_add. 然后在test_module.py中調(diào)用該包中__init__模塊中的函數(shù),,如下圖所示,,直接通過包名來調(diào)用,從這個(gè)可以看出,,包其實(shí)也是一個(gè)特殊的模塊.導(dǎo)包就是導(dǎo)__init__.py模塊,。 |
|