module and package
模塊
一個模塊就是一個包含了python定義和聲明的文件,文件名就是模塊名字加上.py的後綴。
隨著程序的發展,功能越來越多,為了方便管理,我們通常將程序分成一個個的文件,這樣做程序的結構更清晰,方便管理。
這時我們不僅僅可以把這些文件當做腳本去執行,還可以把他們當做模塊來導入到其他的模塊中,實現了功能的重復利用,
導入模塊
import module名
導入模塊時python會做三件事
1.為源文件(spam模塊)創建新的名稱空間,在spam中定義的函數和方法若是使用到了global時訪問的就是這個名稱空間。
2.在新創建的命名空間中執行模塊中包含的代碼,見初始導入import spam
3.創建名字spam來引用該命名空間
為模塊起別名
import pandas as pd
在一行導入多個模塊,不推薦(可讀性不強)
import pandas ,os ,time
from module import 變量名
將模塊當腳本執行
if __name__ == ‘__main__‘: main()
每一個py文件都有自己的__name__ 這條語句的作用:用來控制.py文件在不同的應用場景下執行不同的邏輯。
當該py文件被直接運行時,__nam__這條屬性就是__mian__ ,條件成立,被執行。而當這個py文件被當模塊導入時,這個__name__就等於該py文件的名字,條件不成立。可以用來測試。
模塊搜索路徑
python解釋器在啟動時會自動加載一些模塊,可以使用sys.modules查看
模塊的查找順序是:內存中已經加載的模塊->內置模塊->sys.path路徑中包含的模塊
需要特別註意的是:我們自定義的模塊名不應該與系統內置模塊重名。雖然每次都說,但是仍然會有人不停的犯錯。
初始化後,python程序可以修改sys.path,路徑放到前面的優先於標準庫被加載。
dir函數
內建函數dir是用來查找模塊中定義的名字,返回一個有序字符串列表
包(package)
1. 無論是import形式還是from...import形式,凡是在導入語句中(而不是在使用時)遇到帶點的,都要第一時間提高警覺:這是關於包才有的導入語法
2. 包是目錄級的(文件夾級),文件夾是用來組成py文件(包的本質就是一個包含__init__.py文件的目錄)
3. import導入文件時,產生名稱空間中的名字來源於文件,import 包,產生的名稱空間的名字同樣來源於文件,即包下的__init__.py,導入包本質就是在導入該文件
__init__.py文件
不管是哪種方式,只要是第一次導入包或者是包的任何其他部分,都會依次執行包下的__init__.py文件(我們可以在每個包的文件內都打印一行內容來驗證一下),這個文件可以為空,但是也可以存放一些初始化包的代碼。
關於__pycache__
當第一次運行 python 腳本時,解釋器會將 *.py
腳本進行編譯並保存到 __pycache__
目錄
下次執行腳本時,若解釋器發現你的 *.py
腳本沒有變更,便會跳過編譯一步,直接運行保存在 __pycache__
目錄下的 *.pyc
文件
module and package