python的模块、包、库区别。导入包/模块的方式
直接進入主題,如果覺得文章可以,記得點點贊和關注,我主要會寫一些在學習過程中遇到的困難
模塊
為了使代碼更容易維護,提高代碼重用價值:可以將一組相關功能的代碼寫入一個單獨的.py文件中;使別人導入使用;這個.py文件就被稱作是一個模塊
當我們使用 import 語句導入模塊時,Python解釋器首先會去內置名稱空間中尋找,即判斷導入的模塊是不是內置模塊(例如time模塊就是Python內置模塊),然后再去 sys.path 列表中定義的路徑從前往后尋找 .py文件
如下是在個人筆記本上輸出的 sys.path列表:
包
包是一個有層次的文件目錄結構,它定義了由相關的(或者說是在這個模塊里需要調用另一個模塊)n個模塊或n個子包。包含__init__.py文件的目錄,這個目錄下一定的有則會個__init__.py文件和其他模塊或子包。在調用這個包時都會執行package 包下和子包下的 init 文件。
現在有如下目錄結構:
├─ROOT
│ ├─pk_1
│ │ ├─__init__.py
│ │ ├─m1.py
│ ├─pk_2
│ │ ├─__init__.py
│ │ └─m2.py
│ ├─__init__.py
│ ├─test.py
pk_1 和 pk_2 包中的 init.py 文件都為空,ROOT包下的 test.py 想要使用 pk_1 包下 m1模塊中的方法,可以使用如下語句:
但是使用如下語句,就會拋出異常:
#test.py from pk_1 import * m1.fun_1() # 異常信息: NameError: name 'm1' is not defined ***************************************************************** ***************************************************************** #test.py import pk_1 pk_1.m1.fun_1() # 異常信息: AttributeError: module 'pk_1' has no attribute 'm1'這時候可以在 pk_1 包中的__init__.py 中 進行 包提升(在包中提升導入權限),pk_1 包的 init.py 文件內容如下:
#pk_1包下的_init_.py from pk_1.m1 import fun_1然后在 test.py 文件中可以直接通過包名引入方法:
1)
from pk_1 import fun_1 # 或 from pk_1 import * fun_1()2)
import pk_1 pk_1.fun_1()這個就是 包中 init.py 文件存在的意義,可以將相關的導入語句 或 提升導入權限的語句 寫在 init.py文件中,這樣使用者就不需要了解包中的內部結構,可以直接通過包名 調用該包(package)中某個模塊的方法~
庫
參照其他編程語言的一個喊法;完成一定功能的代碼集合,具體表現可以是一個模塊,也可以是包。庫可以理解為倉庫,例如標準庫,則是一組很多的想numpy,matplotlib等這么多的包,或者模塊。
總結:
模塊<包<庫
導入包/模塊的方式:(這一塊的知識點比較瑣碎,需要自己多做實驗慢慢體會掌握)
import M #導入單個模塊import P.M #導入P包里的某單個模塊,會自動執行P里面的__init__.py文件import P.sub_p.M #導入P包里的子包sub_p里的單個M模塊,會自動執行P里的__init__.py和sub_p里的__init__.py文件import M1,M2 #導入多個模塊,或者用兩次import補充:如果導入的是一個包:①默認不會導入任何模塊②解決方案:②.1 在__init__.py文件中,再次導入需要的模塊(該模塊需要指定一個絕對路徑,例如加上包名)②.2 應該以from ... import ... 的形式導入(包>模塊>模塊資源),導入模塊資源時也可以是多個。注意導入順序:從from到import的順序應該是包>模塊>模塊資源這樣從大到小的順序總結
以上是生活随笔為你收集整理的python的模块、包、库区别。导入包/模块的方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详细分解Transformer各部件总结
- 下一篇: pycharm的安装与python解释器