包包
包,其實在上面的一些例子中,都創建了不同的包名了,具體可以仔細觀察。在一開始模組的簡介中提到,使用模組可以避免函數名和變數名衝突。相同名字的函數和變數完全可以分別存在不同的模組中,因此,我們自己在編寫模組時,不必考慮名字會與其他模組衝突。但也要注意,盡量不要與內建函數名字衝突。但這裡也有個問題,如果不同的人寫的模組名稱相同呢?為了避免模組名衝突,Python 又引入了按目錄來組織模組的方法,稱為套件(Package)。
例如最開始的例子,就引入了包,這樣子做就算有相同的模組名,也不會造成重複,因為包名不同,其實也就是路徑不同。如下圖,引入了包名後, lname.py 其實變成了com.Learn.module.nameattributes.lname
仔細觀察的人,基本上會發現,每一個套件目錄下面都會有一個__init__.py 的文件,為什麼呢?
因為這個檔案是必須的,否則,Python 就把這個目錄當成普通目錄,而不是一個套件 。 __init__.py 可以是空文件,也可以有Python程式碼,因為 __init__.py 本身就是一個模組,而它對應的模組名就是它的包名。