『無為則無心』Python函數 — 37、Python中的包
- 2022 年 1 月 25 日
- 筆記
- 高級測試必會技能 - Python基礎
包是將有聯繫的模組組織在一起,即放到同一個文件夾下,並且在這個文件夾創建一個名字為__init__.py 文件,那麼這個文件夾就稱之為包(包就是一個文件夾)。
換句話說,包也是一個模組,是一個更高級的模組。當我們模組中程式碼過多時,或者一個模組需要被分解為多個模組時,這時就需要使用到包,普通的模組就是一個py文件,而包是一個文件夾。引入了一個包,那包中的模組也能被引用了。
1、製作包
(1)創建包
[New] —> [Python Package] —> 輸入包名 —> [OK] —> 新建功能模組。
- [New] —> [Python Package]

- 輸入包名 —> [OK](或者回車)

- 可以看到項目目錄導航窗口中,看到我們創建的包和包中的
__init__.py文件。
注意:新建包後,包內部會自動創建
__init__.py文件,這個文件控制著包的導入行為。
(2)在包內創建模組
1)新建包內模組:my_module1 和 my_module2
[new] —> [Python File] —> 輸入文件名
2)模組內程式碼如下
# my_module1
print(1)
def info_print1():
print('my_module1')
# my_module2
print(2)
def info_print2():
print('my_module2')
2、導入包
方法一
# 導入
import 包名.模組名
# 調用包中模組的功能
包名.模組名.目標
示例:
# 導入包中模組--包名.模組名
import my_package.my_module1
# 調用功能--包名.模組名.功能()
my_package.my_module1.info_print1()
方法二
# 導入包中功能
from 包名 import * 或者 功能名1、2、3...
# 調用模組功能
模組名.目標
編輯__init__.py文件中添加__all__ = []
__all__ = ['my_module1']
示例:
# 導包
from my_package import *
# 調用__all__列表中定義模組的功能。
my_module1.info_print1()
注意:
必須在
__init__.py文件中添加__all__ = [],控制允許導入的模組列表。如果沒有定義在
__all__列表中的模組,無法導入到指定文件中。
3、關於__pycache__文件夾說明
在包中還有一個叫__pycache__的文件夾,__pycache__ 是模組的快取文件夾。
Python程式碼在執行前,需要被解析器先轉換為機器碼,然後再執行,所以我們在使用模組(包)時,也需要將模組的程式碼先轉換為機器碼然後再交由電腦執行,而為了提高程式運行的性能,Python會在編譯過一次以後,將程式碼保存到一個快取文件中,這樣在下次載入這個模組(包)時,就可以不再重新編譯而是直接載入快取中編譯好的程式碼即可(避免重複解釋)。
__pycache__文件夾可以刪除,但是以後在調用包中的模組時,還會重新解釋模組,還會把解釋器處理完的程式碼保存在__pycache__文件夾中。
4、Python標準庫
為了實現開箱即用的思想,Python中為我們提供了許多模組的標準庫,在這個標準庫中,有很多很強大的模組,提供我們可以直接使用,並且標準庫會隨Python的安裝一同安裝。
模組、包和標準庫的關係
- 模組:就是一個
.py文件,相當於一個工具類。 - 包:將有聯繫的模組組織在一起,即放到同一個文件夾下,方便控制管理。
- 標準庫:官方定義好的,具有相關功能模組的集合。如
os和sys等
總結:
這三個概念實際上都是模組,只不過是個體和集合的區別。
第三方庫:就是由其他的第三方機構,發布的具有特定功能的模組。


