溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python中包與模塊的示例分析

發(fā)布時間:2022-03-19 13:37:34 來源:億速云 閱讀:377 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要為大家展示了“Python中包與模塊的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Python中包與模塊的示例分析”這篇文章吧。

什么是 Python 的包與模塊

  • 包的定義:簡單粗暴的解釋,當(dāng)一個文件夾內(nèi)包含一個 __init__.py 文件時我們就可以認(rèn)為它是一個包;如果該文件夾下還有子文件夾且該子文件夾中也有一個 __init__.py 文件,我們就可以認(rèn)為它是包中還有包。

  • 模塊的定義:任何 *.py 格式的文件都可以當(dāng)作模塊,我們可以使用 import 關(guān)鍵字對其執(zhí)行導(dǎo)入操作。

我們都知道每一個模塊下都是 Python 的函數(shù),所以我們使用一個包或者模塊,最終的目的就是使用他們內(nèi)部函數(shù)的功能幫助我們實現(xiàn)業(yè)務(wù)需要。

一個包里,可以有一個或多個模塊;通過調(diào)用 包 下面某個 模塊 的某個函數(shù)去執(zhí)行,這就是我們使用 Python包或模塊的目的

包的身份證

__init__.py 文件時每一個 python 包必須存在的文件,只有存在 __init__.py 文件的目錄,python 解釋器才會認(rèn)為這是一個 包 ;如果沒有該文件, python 解釋器只會認(rèn)為這是一個普通的文件夾。示意圖如下:

Python中包與模塊的示例分析

從上圖我們看出來,除了 __init__.py 文件之外,包的目錄文件圖標(biāo)有個圓形的小圓點式的圖案。而普通文件夾沒有任何標(biāo)識。試想一下,如果我們在 python_package_test 文件夾內(nèi)創(chuàng)建一個 __init__.py 文件會怎樣?44944…

Python中包與模塊的示例分析

如何創(chuàng)建包

其實已經(jīng)不再需要多說什么了,首先創(chuàng)建一個文件夾。然后在文件夾中創(chuàng)建一個 python 包的身份證文件 __init__.py 即可;__init__.py 文件可以空空如也,什么都不用寫,只要保證該文件的名字是 __init__.py 即可。 Python 解釋就會認(rèn)為這是一個包,之后我們就可以在包里書寫任意的腳本(也就是模塊),非常的簡單。不過我們還需要創(chuàng)建包的良好規(guī)范:

  • 首先要有一個主題,功能明確,同時也要方便使用;方便別人看一眼名字就知道是否需要使用你這個包。

  • 其次層次要分明,一個包內(nèi)可以有很多各模塊或者子包。它們之間的關(guān)系要明確,這也為后期維護代碼起到很好的輔助作用。

除了上述的創(chuàng)建文件夾之后再創(chuàng)建包的身份文件 __init__.py 之外,Pycharm 還可以直接通過 new ---> Python Package 的方式,直接創(chuàng)建一個包。示意圖如下:

Python中包與模塊的示例分析

創(chuàng)建包的小練習(xí)

接下來我們嘗試創(chuàng)建一個 animal 的包,同時在 animal 包下創(chuàng)建一個 cat 包 和 dog 包。然后分別在 cat 包與 dog 包中創(chuàng)建一個 action.py 模塊,并且在各自的 action.py 模塊定義 eat()、jump()、run() 函數(shù)。

Python中包與模塊的示例分析

同樣的方法在 dog 子包內(nèi)創(chuàng)建 action.py 模塊,內(nèi)容如下:

# coding:utf-8


def eat():
    return '狗愛啃骨頭'


def run():
    return '貓會跑'


def jump():
    return '貓會跳'

這里我們創(chuàng)建了 cat 與 dog 兩個子包,實際上真正有功能的是兩個子包中的 action.py 模塊。在這兩個模塊內(nèi),各有三個函數(shù) eat()、run()、jump()。所以我們的最終目的是使用分別來自 cat 與 dog 兩個子包的 action.py 模塊的三個函數(shù),接下來我們就看一下如果導(dǎo)入、調(diào)用這兩個子包與使用子包內(nèi)的函數(shù)。

包的導(dǎo)入 - import

如果想要使用一個 包 或者 模塊 ,就需要先將其導(dǎo)入到我們當(dāng)前的腳本中。在學(xué)習(xí) python 腳本結(jié)構(gòu) 的章節(jié),我們曾經(jīng)介紹過,在腳本的頂部為 頭部注釋 區(qū)域;接下來就是 導(dǎo)入?yún)^(qū)域 ,導(dǎo)入?yún)^(qū)域 就是將我們需要的包、模塊導(dǎo)入到我們當(dāng)前的腳本中。接下來 我們看一下 包的導(dǎo)入 import 關(guān)鍵字的用法:

# 用法:
import package

# 參數(shù):
# package:被導(dǎo)入的包的名字

# 要求:
# 只有 python 包才能被 impor 關(guān)鍵字捕獲并導(dǎo)入,也就是說 python 包中必須要有 __init__.py 這個文件
# 并且 import 只會拿到當(dāng)前對應(yīng)包下的 __init__.py 中的功能或當(dāng)前模塊下的功能

關(guān)于 import 只會拿到當(dāng)前對應(yīng)包下的 __init__.py 中的功能或當(dāng)前模塊下的功能 可能不是那么好理解,接下來 我們在 Pycharm 做個小實驗,加深一下理解。

首先打開 Terminal 終端,輸入 python 啟動 Python 解釋器。然后導(dǎo)入 animal 包,然后使用 animal 包下的 cat子包。如下圖:

Python中包與模塊的示例分析

這里發(fā)現(xiàn)報錯了,屬性錯誤 animal 里沒有 cat 這個屬性;這是為什么?cat 這個子包 確實在我們的 animal 包下啊。再做個小實驗,我們在 animal 包下的 __init__.py 文件內(nèi)書寫一些內(nèi)容。

Python中包與模塊的示例分析

然后退出我們的 python 解釋器再進(jìn)入,為什么要退出呢?這是因為我們的包的當(dāng)前結(jié)構(gòu)發(fā)生了變化,所以需要退出再重新進(jìn)入,否則 在 Treminal 終端執(zhí)行的仍然是之前的結(jié)果。這個時候我們再重新 import animal 的包,然后執(zhí)行以下看看。

Python中包與模塊的示例分析

這時候在結(jié)合剛剛我們說的 import 只會拿到當(dāng)前對應(yīng)包下的 __init__.py 中的功能或當(dāng)前模塊下的功能 , 如果想要調(diào)用一個包中或者模塊中的函數(shù)函數(shù)功能,只需要通過包或者模塊的名稱 + . 的形式去調(diào)用它的函數(shù)名就可以了。這個方法是不是和我們面向?qū)ο蟮氖褂梅绞胶芟嗨颇兀?/p>

現(xiàn)在又有一個問問題了,剛剛我們導(dǎo)入的是 animal 包以及使用了 __init__.py 文件中的功能,那么我們我們該如何使用 animal 包下的 cat / dog 子包中的函數(shù)功能呢? 繼續(xù)往下,我們看看 模塊的導(dǎo)入 部分

模塊的導(dǎo)入 - from…import

接下來我們學(xué)習(xí)如何通過包導(dǎo)入對應(yīng)的模塊,這一次我們需要 from、import 兩個關(guān)鍵字來配合了;當(dāng)這兩個關(guān)鍵字配合起來之后,就可以通過某個包找到對應(yīng)的模塊。接下來 我們看一下 from...import... 的用法

# 用法:
from package import module

# 參數(shù):
# package:要導(dǎo)入的包名
# module:包中的目標(biāo)模塊

# from package import module 的意思就是 從當(dāng)前的包中導(dǎo)入某個模塊


# 示例如下:

from animal import dog
dog.run()

# 通過 from ... import ... 直接找到了 dog 模塊
# 所以只需要使用 dog 模塊 直接用 . 的方式找到里面的 run 方法就可以執(zhí)行了

接下來我們嘗試 參照上文的 animal 包 導(dǎo)入 dog 的子包 調(diào)用里面的 run 函數(shù),內(nèi)容如下:

導(dǎo)入子包及子包函數(shù)的調(diào)用

Python中包與模塊的示例分析

這里我們發(fā)現(xiàn)了一個問題,兩個子包下面都有 action 模塊,當(dāng)我們分別 導(dǎo)入調(diào)用的時候會被覆蓋,有沒有什么辦法讓我們同時導(dǎo)入兩個子包的 action 模塊,分別可以調(diào)用但是互不影響呢?這就需要借助到我們的as 關(guān)鍵字 了。 在我們學(xué)習(xí)異常的時候,利用 as 關(guān)鍵字 關(guān)鍵字將捕獲的異常進(jìn)行一個起別名的操作,在這里我們依然可以對我們導(dǎo)入的模塊起別名。如下圖

Python中包與模塊的示例分析

現(xiàn)在我們是直接通過導(dǎo)入模塊來調(diào)用 action 模塊下的函數(shù),那可不可以直接調(diào)用函數(shù)來使用的呢?嘗試一下:

Python中包與模塊的示例分析

導(dǎo)入主包及主包的函數(shù)調(diào)用

首先我們在主包 animal 的子包同級路徑下創(chuàng)建一個 main.py 文件,并定義一個 main 函數(shù),然后再進(jìn)行調(diào)用。內(nèi)容如下:

# coding:utf-8


def animal():
    return '這是一個 animal 包下子包同級路徑下的模塊的函數(shù)'

然后我們調(diào)用該 main.py 文件的 animal 函數(shù)

Python中包與模塊的示例分析

導(dǎo)入的包與子包模塊之間過長如何優(yōu)化

我們來看一下 導(dǎo)入 animal 包下 cat 子包 的 action 模塊的 eat() 函數(shù)的導(dǎo)入

Python中包與模塊的示例分析

前文我們提到過 import 只會拿到當(dāng)前對應(yīng)包下的 __init__.py 中的功能或當(dāng)前模塊下的功能 ,那么我們是否可以把 cat 與 dog 子包中的函數(shù)導(dǎo)入到 animal 包下的 __init__.py ?

Python中包與模塊的示例分析

接下來 我們嘗試一下 在 animal 包 同級別下創(chuàng)建一個 animal_test.py 文件,然后在 animal_test.py 文件內(nèi)導(dǎo)入 子包獲取其函數(shù)。

Python中包與模塊的示例分析

注意:這里的 animal_test.py 腳本 需要與 animal 包處于同一級別的文件加下,才可以導(dǎo)入我們定義好的 __init__.py 文件的函數(shù)功能;如果不在同一個文件的級別下,導(dǎo)入是不成功的,大家可以自己手動試一下。

強大的第三方包

上面我們學(xué)習(xí)了什么是 python 的包,以及如何創(chuàng)建一個包,并通過導(dǎo)入的方法使用我們的包與模塊。在上面對包的使用相當(dāng)于是我們自己開發(fā)自己使用,屬于一種自產(chǎn)自銷的模式。而接下來我們要學(xué)習(xí)使用他人開發(fā)好的第三方包來幫助我們高效的工作,學(xué)完這一小章節(jié)我們就可以從浩瀚的第三方包選擇我們需要的包來幫助我們自己完成我們想要的功能。

比如爬蟲的包可以幫助我們爬取圖片、文章等各種我們想要的數(shù)據(jù);繪圖的包可以幫我們對各種圖片進(jìn)行處理…

什么是第三方包

其實第三方包就是其他程序員公開到 Python 指定網(wǎng)站上寫好的功能封裝成包或者模塊,方便其他程序員方便下載和使用。

使用第三方包最大的好處就是我們想要實現(xiàn)的功能可能別人已經(jīng)幫助我們寫好了,我們只需要拿來主義,直接應(yīng)用在我們自己的代碼中就可以了,這樣自然就大大的提高了我們的開發(fā)效率

如何安裝第三方包

了解了第三方包之后,我們需要去下載并安裝他們才可以在我們的代碼中使用。而 pip 與 easy_install就是獲取第三方包的工具,在我們安裝好python 的時候,pip 就已經(jīng)自動安裝好了,我們只需要在 Terminal 終端 去使用即可;

隨著 python 的發(fā)展越來越快,pip 的使用率也越來越高,就逐漸的替代了 easy_install 。

我們剛剛說的 在我們安裝好 python 的時候,就自動的安裝了 pip 其實是有版本限制的,在 Python 3.4 版本之前是不會安裝 pip 的; Python 3.4 版本之后,會自帶這兩種包管理工具。

如果使用的是 老版本的 python ,可以通過 https://pip.pypa.io/en/stable/installing/ 去下載安裝 pip

由于 pip 管理工具中的第三方包要比 easy_install 多很多,所以我們主要介紹 pip 的使用。pip 的用法也是非常簡單的,我們只需要在 Terminal 終端,輸入 pip install 包名 就可以進(jìn)行下載并安裝。

這里也推薦大家一個 python 程序員的寶藏網(wǎng)站,github.com 搜索 python 第三方包 (github 會伴隨程序員的完整職業(yè)生涯);在 github 有很多程序員公開出來的第三方包,自然也有 python 的。需要注意的是 github 是一個國外的網(wǎng)站,所以訪問的有點慢,大家可以 ke 、xue、shang、wang 。或者也可以臨時使用 國內(nèi)的鏡像源地址 ,在下方的 pip 安裝拓展 小節(jié)有介紹。

pip 安裝 第三包

# 查詢當(dāng)前 pip 版本:
pip -V

# 執(zhí)行結(jié)果如下:
# pip 21.1.2 from D:\PycharmProjects\XXXXX\XXXXX\venv\lib\site-packages\pip (python 3.10)

Python中包與模塊的示例分析

PS:每一個版本的 python 都有自己的 pip ,所以當(dāng)我們安裝了多個版本的 python 后,猶豫 python 版本太多,所以如果我們使用錯了 pip ,就會造成我們有的時候看著像是已經(jīng)安裝好了第三方包,但卻無法使用的情況。所以這個地方是一定要注意的?。?!

安裝第一個第三方包工具 - ipython

接下來我們就嘗試一下安裝我們第一個第三方包 - ipython;

ipython 是一個 python 的交互式 shell ,比默認(rèn)的 python shell 好用很多,支持變量自動補全,自動縮進(jìn)。

在 Terminal 終端,輸入 pip install ipython ,如果報錯:WARNING: You are using pip version 21.1.2; however, version 22.0.4 is available. 可以通過 ke、xueshangwang 的方式安裝、或 臨時使用國內(nèi)鏡像源地址、再或者 升級 你的 pip ;升級 命令 python -m pip install --upgrade pip

Python中包與模塊的示例分析

Python中包與模塊的示例分析

這里看到,我們安裝失敗了;利用我們上面說的方法 ke、xueshang、wang 的方式們再次安裝

Python中包與模塊的示例分析

當(dāng)看到 Successfully 則表示我們已經(jīng)安裝成功了,雖然仍提示 WARNING 讓我們升級 pip ,但是我們依然安裝成功。試試看 ipython 是否可以正常使用。

Python中包與模塊的示例分析

通過與 python 自帶的 shell 終端相比, ipython 不僅交互更方便,還可以自動支持變量自動補全,自動縮進(jìn)。凸顯了極大的人性化的便捷性。

這里還有個需要注意的地方,當(dāng)我們的環(huán)境安裝了 多個版本的 python 時,一定要檢查我們安裝的路徑對不對,否則就會出現(xiàn)安裝到其他版本 python 的 情況。如下圖:

Python中包與模塊的示例分析

當(dāng)然了如果默認(rèn)是進(jìn)入我們其他版本的 python 或者 ipython 我們可以通過 python3 或者 ipython3 的命令進(jìn)入到我想要進(jìn)去的版本的交互終端。

Python中包與模塊的示例分析

注意:在我們平時執(zhí)行一個腳本的時候,我們還是推薦使用 python 解釋器,ipython 只是作為我們的一個調(diào)試環(huán)境使用。

pip 安裝拓展

實際上我們安裝 pip 和 第三方包 是有選擇的,默認(rèn)情況下選擇的是國外的地址去下載并安裝,由于網(wǎng)絡(luò)與距離的原因往往會很慢,同時因為網(wǎng)絡(luò)波動問題會造成我們安裝失敗的情況。

在這種情況下,我們國內(nèi)就推出了一寫可以就近進(jìn)行下載和安裝的地址,比如我們的 清華、阿里云、中國科技大學(xué)、華中理工大學(xué)等都提供了近源地址。如下:

# 官方源地址
# https://pypi.python.org/simple/
# https://pypi.tuna.tsinghua.edu.cn/simple/

# 國內(nèi)源地址
# 阿里云:http://mirrors.aliyun.com/pypi/simple/ 
# 中國科技大學(xué):https://pypi.mirrors.ustc.edu.cn/simple/
# 豆瓣:http://pypi.douban.com/simple/
# 清華大學(xué):https://pypi.tuna.tsinghua.edu.cn/simple/
# 中國科學(xué)技術(shù)大學(xué):http://pypi.mirrors.ustc.edu.cn/simple/

# 使用方法如下:

pip install -i http://pypi.douban.com/simple/ ipython
pip install -i http://pypi.douban.com/simple/ ipython==7.12.0   # 指定版本號安裝

pip 安裝第三方包的卸載

既然可以安裝,那就肯定可以卸載。卸載方法如下:

# 卸載方法:

pip uninstall ipython

# 這里同樣需要注意,被卸載的第三方包對應(yīng)的 python 解釋器版本的問題。

Python中包與模塊的示例分析

以上是“Python中包與模塊的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI