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