日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

深入理解并使用python的模块与包

發(fā)布時間:2025/4/16 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入理解并使用python的模块与包 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

模塊

編寫好的一個python文件可以有兩種用途:
1)腳本,一個文件就是整個程序,用來被執(zhí)行
2)模塊,文件中存放著一堆功能,用來被導(dǎo)入使用

模塊的分類

1)開發(fā)者編寫的 .py文件
2 ) 由C或C++編譯的共享庫或DLL
3 ) 包
4 ) 內(nèi)置模塊

模塊的查找順序
1)內(nèi)存中已經(jīng)加載的模塊(防止重復(fù)加載)
2 ) 內(nèi)置模塊(所以說自定義模塊不應(yīng)該和系統(tǒng)模塊同名)
3 )sys.path路徑中包含的模塊

額外知識:sys.path初始化順序
1 )執(zhí)行文件所在的當前目錄
2 )PTYHONPATH(包含一系列目錄名,與shell變量PATH語法一樣)
3 )依賴安裝時默認指定的

模塊的使用
使用前必知
1)不管程序走到哪個模塊的哪一步,程序只認程序啟動的路徑文件夾。
2)重導(dǎo)入只會增加模塊的引用
具體地說,第一次導(dǎo)入后就將模塊名加載到內(nèi)存了,后續(xù)的import語句僅是對已經(jīng)加載到內(nèi)存中的模塊對象增加了一次引用,不會重新執(zhí)行模塊內(nèi)的語句
額外功能
1)用于測試環(huán)境的模塊重導(dǎo)入:import importlib? ? ?importlib.reload(aa)
2 )?為模塊名起別名 import spam as sm ,這種做法常用于統(tǒng)一接口名一樣的模塊
3 )?限制模塊導(dǎo)入的名字
  在spam.py中新增一行,__all__=['money','read1'] #這樣在另外一個文件中用from spam import *就這能導(dǎo)入列表中規(guī)定的兩個名字

擴展知識:提高模塊加載速度的.pyc文件
pyc文件(字節(jié)碼文件)也可以被python解釋器執(zhí)行,其功能主要是提高加載模塊的速度。
注意的是:從.pyc文件中讀指令來執(zhí)行不會比從.py文件中讀指令執(zhí)行更快,只有在模塊被加載時,.pyc文件才是更快的

pyc文件怎樣產(chǎn)生?
python解釋器會在__pycache__目錄中下緩存每個模塊編譯后的版本,
格式為:module.version.pyc。通常會包含python的版本號。例如,在CPython3.3版本下,spam.py模塊會被緩存成__pycache__/spam.cpython-33.pyc。
這種命名規(guī)范保證了編譯后的結(jié)果多版本共存。Python檢查源文件的修改時間與編譯的版本進行對比,如果過期就需要重新編譯。這是完全自動的過程。
由于編譯的模塊是平臺獨立的,所以相同的庫可以在不同的架構(gòu)的系統(tǒng)之間共享。 使得pyc成為一種跨平臺的字節(jié)碼,是由python虛擬機來執(zhí)行的,
但是pyc的內(nèi)容跟python的版本相關(guān),不同的版本編譯后的pyc文件不同,2.5編譯的pyc文件不能到3.5上執(zhí)行,
并且pyc文件是可以反編譯的,因而它的出現(xiàn)僅僅是用來提升模塊的加載速度的,不是用來加密的。

注意:python解釋器在以下兩種情況下不檢測緩存
1) 如果是在命令行中被直接導(dǎo)入模塊,則按照這種方式,每次導(dǎo)入都會重新編譯,并且不會存儲編譯后的結(jié)果
2 )? 如果源文件不存在,那么緩存的結(jié)果也不會被使用,如果想在沒有源文件的情況下來使用編譯后的結(jié)果,則編譯后的結(jié)果必須在源目錄下

?


?


包就是一個包含有__init__.py文件的文件夾,所以其實我們創(chuàng)建包就是為了將模塊組織起來。創(chuàng)建包的目的是為了被導(dǎo)入使用。
注意: 在python3中,即使包下沒有__init__.py文件,import 包仍然不會報錯,而在python2中,包下一定要有該文件,否則import 包報錯
包的使用
使用前必知
1)導(dǎo)入包本質(zhì)就是在導(dǎo)入包的包下的__init__.py,?產(chǎn)生的名稱空間的名字同樣來源于文件
2)單獨導(dǎo)入包名稱時不會導(dǎo)入包中所有包含的所有子模塊。from glance.api import *,實際上該語句只會導(dǎo)入包api下__init__.py文件中定義的名字
  若想僅僅導(dǎo)入包,就使用包.包.模塊形式,例如:import glance.db.models
  或者在__init__.py上面下功夫。

例如:
#glance/__init__.py
from . import cmd

#glance/cmd/__init__.py
from . import manage

3)?from后import導(dǎo)入的模塊,必須是明確的是被導(dǎo)入的右邊不能帶點,否則會有語法錯誤,如:from a import b.c是錯誤語法
4 )??'.','..'這些相對路徑符,只能用于連接包內(nèi)的模塊用的,
  換句話說,存在相對模塊引塊只是為了被另外的模塊引用而存在,永遠不能當做入口。而入口處的路徑必定是絕對路徑

?

轉(zhuǎn)載于:https://www.cnblogs.com/ziyide/p/9096084.html

總結(jié)

以上是生活随笔為你收集整理的深入理解并使用python的模块与包的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。