作者:小K
來源:麥叔編程
最近發現一個問題,好像很多學Python的同學都搞不清楚庫、包和模塊之間的區别。
反正這三者都是通過import和from...import...語句實現的,會用就行,也不用在意過多的細節。
直到上周我發現這個問題竟然在某大廠的Python崗位招聘面試中出現,并“迷”倒不少應聘者,我才覺得這個知識有必要普及下。
模塊(module)❝
Python 模塊(Module),是一個 Python 文件,以 .py 結尾,包含了 Python 對象定義和Python語句。
❞
簡單來說任何一個以.py的文件都可以視為是一個模塊(module)。
這個模塊的功能可能就隻有一個打印Hello World。
「hello_world.py」
def print_hello_world(): print("Hello World")
當一個項目的功能很複雜的時候,我們可以把代碼分割成很多不同的模塊,主碼代碼僅保留實現邏輯,
例如:登錄、查詢、加密、解密....
分割成不同的模塊之後,無論維護還是開發都會方便很多。
當某個功能出Bug後,也比較好定位代碼中的Bug處。
包(Package)❝
包是一個分層次的文件目錄結構,它定義了一個由模塊及子包,和子包下的子包等組成的 Python 的應用環境。
簡單來說,包就是文件夾,但該文件夾下必須存在 __init__.py 文件, 該文件的内容可以為空。__init__.py 用于标識當前文件夾是一個包。
❞
如果說模塊是一個py文件的話,那麼包就是一個含有__init__.py文件的文件夾。
❝
__init__.py是一個内容為空,且隻有一個“名字”的文件。
❞
上圖就是一個簡單的名字為HelloWorld的包。
假如我們需要将 「打印Hello World」 這個功能做的更加細化,讓它根據使用對象,能輸出不同語言的Hello World。
那麼對于這個功能的實現又會寫很多.py文件,但是這些.py文件都是用來支持「打印Hello World」 這個功能的,那麼我們最好使用“包”這個方式對代碼進行分類/分割。
對于一些第三方的包,或者框架例如Scrapy,django,flask...往往都是使用“包”(好像說了正确的廢話)
例如我們導了django,import導入的将是一個django的文件夾。
庫(library)
對于庫的定義,和包(Package)有點類似。
在中文網上我沒有找到特别滿意的文字定義,所以我Google了一下。
❝
A Python library is a collection of related modules. It contains bundles of code that can be used repeatedly in different programs. It makes Python Programming simpler and convenient for the programmer. As we don't need to write the same code again and again for different programs.
Python庫是相關模塊的集合。它包含可以在不同程序中重複使用的代碼包。它使Python編程更加簡單和方便。因為我們不需要為不同的程序一遍又一遍地寫相同的代碼。
❞
一般我們說“庫”的時候,會習慣性加上“第三方”,這也無可厚非。
一般能定義成庫的,基本上都是完成了特定功能的實現,并得到使用者的肯定,但庫的本質是“包”/“模塊”。
例如django庫,
對于使用的人來說,他是一個庫;
但是對于該庫作者來說,django就是他寫的一個包。
django庫實質就是一個包
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!