本文來自於千鋒教育在阿里雲開發者社區學習中心上線課程《Python入門2020最新大課》,主講人姜偉。
包的使用
一個模塊就是一個 py 文件,在 Python 里為了對模塊分類管理,就需要劃分不同的文件夾。多個有聯繫的模塊可以將其放到同一個文件夾下,為了稱呼方便,一般把 Python 里的一個代碼文件夾稱為一個包。
導入包的方式
現有以下包newmsg ,包里有兩個模塊,分別是sendmsg.py 、recvmsg.py 文件。在包的上級文件夾里,有一個test.py 文件,目標是在test.py 文件里引入newmsg 的兩個模塊。
目錄結構如下圖所示:
sendmsg.py文件里的內容如下:
def send_msg():
print('------sendmsg方法被調用了-------')
recvmsg.py文件里的內容如下:
def recv_msg():
print('-----recvmsg方法被調用了--------')
可以使用以下幾種方式來導入模塊,使用模塊里的方法。
1>. 直接使用包名.模塊名導入指定的模塊。
2>. 使用from xxx import xxx
方式導入指定模塊。
3>. 使用__init__.py
⽂文件,導入包里的指定模塊。
可以在newmsg
里創建__init__.py
文件,在該文件里導入指定的內容。
在__init__.py
文件里編寫代碼:
from . import sendmsg # 導入指定的模塊 . 代表的是當前文件夾
test.py文件里的代碼
import newmsg # 導入時,只需要輸入包名即可。在包名的__init__.py文件里,導入了指定模塊
newmsg.sendmsg.sendm_msg() # 可以直接調用對應的方法
# newmsg.recvmsg.recv_msg() 不可以使用 recvmsg 模塊,因為 __init__.py文件里沒有導入這個模塊
4.> 使⽤用__init__.py
文件,結合__all__
屬性,導入包里的所有模塊。
在newmsg
包里的__init__.py
文件里編寫代碼:
__all__ = ["sendmsg","recvmsg"] # 指定導入的內容
test.py文件代碼:
from newmsg import * # 將newmsg里的__inint__.py文件里,__all__屬性對應的所有模塊都導入
sendmsg.sendmsg()
recvmsg.recvmsg()
總結
- 包將有聯繫的模塊組織在一起,即放到同一個文件夾下,並且在這個文件夾創建一個名字為
__init__.py
文件,那麼這個文件夾就稱之為包。 - 有效避免模塊名稱衝突問題,讓應用組織結構更加清晰
__init__.py
文件有什麼用
__init__.py
控制著包的導入行為。__init__.py
為空僅僅是把這個包導入,不會導入包中的模塊。可以在__init__.py
文件中編寫內容。
newmsg/__init__.py
文件:
print('hello world')
別的模塊在引入這個包的時候,會自動調用這段代碼。
__all__
在__init__.py
文件中,定義一個__all__
變量,它控制著 from 包名 import *
時導入的模塊。newmsg/__init__.py
文件:
__all__ = ['sendmsg','recvmsg']