參考: 部落格教學
什麼是模組?
模組是一些列功能的集合體
常見的模組形式:(自定義模式、第三方模組、內建模組)
1 乙個module.py就是乙個模組,檔名是module.py,而模組名是module
2 把一系列模組組織到一起的資料夾(注:資料夾下有乙個__init__.py檔案,該資料夾稱之為包)
3 已被編譯為共享庫或dll的c或c+
+擴充套件
4 使用c編寫並鏈結到python直譯器的內建模組
為什麼要用模組
#1、從檔案級別組織程式,更方便管理
隨著程式的發展,功能越來越多,為了方便管理,我們通常將程式分成乙個個的檔案,這樣做程式的結構更清晰,方便管理。這時我們不僅僅可以把這些檔案當做指令碼去執行,還可以把他們當做模組來匯入到其他的模組中,實現了功能的重複利用
#2、拿來主義,提公升開發效率
#ps:
如果你退出python直譯器然後重新進入,那麼你之前定義的函式或者變數都將丟失,因此我們通常將程式寫到檔案中以便永久儲存下來,需要時就通過python test.py方式去執行,此時test.py被稱為指令碼script。
如何用模組
匯入的方式有兩種
import 模組名
from model import 模組名
import 首次匯入模組發生的3件事
1、以模組為準建立了乙個模組的命名空間
2、執行模組對應的檔案,將執行過程中產生的名字都丟到模組的命名空間
當執行import xx.py, 其實就是執行 xx.py 模組命名空間中的記憶體空間位址
3、在當前執行檔案中拿到模組名
from model import names 首次匯入模組發生的3件事
1、以模組為準建立了乙個模組的命名空間
2、執行模組對應的檔案,將執行過程中產生的名字都丟到模組的命名空間
3、在當前執行檔案的命名空間中拿到乙個名字,該名字直接指向模組中的某乙個名字
優點: 不需要加模組名.名字 能直接執行, 不用加字首,**更為精簡
缺點: 容易與當前執行檔案中命名空間中的名字衝突
# 相同點:
1、 都會執行模組對應的檔案,都會產生模組的命名空間
2、 呼叫功能時,需要跑到定義時尋找作用域關係,與呼叫位置無關
# 不同點:
1、 from
import 不需要加字首,import 需要加字首
from xx import *
可以使用__all__來控制*
(用來發布新版本),使用__all__這就能匯入列表中規定的兩個名字
__all__[
'模組名1'
,'模組名2'
] 控制使用時模組過多的問題,
說明
# 乙個py檔案就是乙個模組,在匯入時必須從某乙個資料夾下該到該py檔案,模組的搜尋路徑指的就是在匯入模組時需要檢索的資料夾們
匯入模組順序
模組的查詢順序是:記憶體中已經載入的模組-
>內建模組-
>sys.path路徑中包含的模組
強調: sys.path的第乙個值是當前執行檔案所在的資料夾
sys.path從以下位置初始化
1 執行檔案所在的當前目錄
2 ptyhonpath(包含一系列目錄名,與shell變數path語法一樣)
3 依賴安裝時預設指定的
當執行檔案確認之後,查詢的模組就會以執行檔案所在的檔案為準
#編寫好的乙個python檔案可以有兩種用途:
一:指令碼,乙個檔案就是整個程式,用來被執行
二:模組,檔案中存放著一堆功能,用來被匯入使用
#python為我們內建了全域性變數__name__,
當檔案被當做指令碼執行時:__name__ 等於'__main__'
當檔案被當做模組匯入時:__name__等於模組名
#作用:用來控制.py檔案在不同的應用場景下執行不同的邏輯
if __name__ ==
'__main__'
:
什麼是包
包是一種通過使用『.模組名』來組織python模組命名空間的方式。
#具體的:包就是乙個包含有__init__.py檔案的資料夾,所以其實我們建立包的目的就是為了用資料夾將檔案/模組組織起來
#需要強調的是:
1. 在python3中,即使包下沒有__init__.py檔案,import 包仍然不會報錯,而在python2中,包下一定要有該檔案,否則import 包報錯
2. 建立包的目的不是為了執行,而是被匯入使用,記住,包只是模組的一種形式而已,包的本質就是一種模組
如何用包
# 匯入包就是導包下的__init__.py檔案
1、包內的所有檔案都是被匯入使用的,而不是被直接執行
2、包內部模組之間的匯入可以使用絕對匯入 (以包的根目錄為基準) 與相對匯入(與當前被匯入的模組所在的目錄為基準)
推薦使用相對匯入
3、相對匯入只能用於模組的匯入,當檔案是執行檔案時,無法在該檔案內使用相對匯入
只有在檔案時被當作模組匯入時,該檔案內才能使用相對匯入
4、凡是在匯入時帶點的. 點的左邊都必須是乙個包
注意事項
# 1.關於包相關的匯入語句也分為import和from ... import ...兩種,但是無論哪種,無論在什麼位置,在匯入時都必須遵循乙個原則:凡是在匯入時帶點的,點的左邊都必須是乙個包,否則非法。可以帶有一連串的點,如item.subitem.subsubitem,但都必須遵循這個原則。但對於匯入後,在使用時就沒有這種限制了,點的左邊可以是包,模組,函式,類(它們都可以用點的方式呼叫自己的屬性)。
# 2、import匯入檔案時,產生命名空間中的名字**於檔案,import 包,產生的命名空間的名字同樣**於檔案,即包下的__init__.py,匯入包本質就是在匯入該檔案
# 3、包a和包b下有同名模組也不會衝突,如a.a與b.a來自倆個命名空間
python基礎 模組與包(一)
模組與包 python中的py檔案我們拿來呼叫的為之模組 主要有內建模組 python直譯器自帶 第三方模組 別的開發者開發的 自定義模組。目前我們學習的是內建模組與第三方模組。通過import來匯入模組。一.time模組 time.函式名稱 1 時間戳 timestamp 通常來說,時間戳表示的是...
python基礎 模組 包
一 模組 1.模組是程式 任何python程式都可以作為模組匯入。程式的儲存也很重要,如果想把程式儲存在c python windows 目錄下,需要告訴直譯器在 尋找模組了。import sys 2.匯入模組 匯入模組只需要一次。import hello 在模組中定義函式 hello python...
python模組與包
路徑修改 命令列怎麼檢視路徑,修改路徑 列印當前搜尋路徑 import sys sys.path sys.path import os os.getcwd os.chdir c www 模組實現構建模組的初衷就是將一些同類的東西進行打包,以免汙染全域性空間,在python的模組裡,對需要隱藏的屬性和...