1. 程式人生 > >module and package

module and package

cnblogs 但是 一行 glob 運行 bsp 隨著 oba ack

模塊

一個模塊就是一個包含了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