欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python學(xué)習(xí)之包與模塊詳解

 更新時(shí)間:2022年03月19日 09:07:33   作者:渴望力量的哈士奇  
在了解完面向?qū)ο笈c異常處理機(jī)制之后,本文將詳細(xì)為大家介紹Python中的包與模塊,文中的示例講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下

大家好,學(xué)完面向?qū)ο笈c異常處理機(jī)制之后,接下里我們要學(xué)習(xí) 包與模塊 。首先我們要了解什么是包?什么是模塊?接下來我們還要學(xué)習(xí) 如何自定義創(chuàng)建包、自定義創(chuàng)建模塊以及如何導(dǎo)入包與模塊。最后我們?cè)趯W(xué)習(xí)如何使用第三方包,第三方包就是別人開發(fā)好的包。關(guān)于包的課程學(xué)完之后,就是文件的讀寫,通過學(xué)習(xí)這方面的知識(shí),可以讓我們動(dòng)態(tài)的創(chuàng)建文件、編輯文件、閱讀文件。當(dāng)我們具備文件的基礎(chǔ)讀寫能力之后,我們就可以學(xué)習(xí)一些相關(guān)的模塊了,如 yaml文件模塊、json文件與模塊、日志模塊....

接下來我們就開始學(xué)習(xí) 包與模塊 ,通過學(xué)習(xí)該部分之后,我們就可以靈活運(yùn)用 Python 在各個(gè)領(lǐng)域中了。比如 web 開發(fā),我們就可以使用 web 相關(guān)的包與模塊。有很多人在為 python 做貢獻(xiàn),他們貢獻(xiàn)的就是這些 包與模塊。而之前我們學(xué)習(xí)的課程,也都是在為我們學(xué)習(xí)包與模塊在做準(zhǔn)備,一句話總結(jié),學(xué)會(huì) 包與模塊 是真正學(xué)會(huì) Python 的重要標(biāo)志。

什么是 Python 的包與模塊

  • 包的定義:簡(jiǎn)單粗暴的解釋,當(dāng)一個(gè)文件夾內(nèi)包含一個(gè) __init__.py 文件時(shí)我們就可以認(rèn)為它是一個(gè)包;如果該文件夾下還有子文件夾且該子文件夾中也有一個(gè) __init__.py 文件,我們就可以認(rèn)為它是包中還有包。
  • 模塊的定義:任何 *.py 格式的文件都可以當(dāng)作模塊,我們可以使用 import 關(guān)鍵字對(duì)其執(zhí)行導(dǎo)入操作。

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

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

包的身份證

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

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

如何創(chuàng)建包

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

  • 首先要有一個(gè)主題,功能明確,同時(shí)也要方便使用;方便別人看一眼名字就知道是否需要使用你這個(gè)包。
  • 其次層次要分明,一個(gè)包內(nèi)可以有很多各模塊或者子包。它們之間的關(guān)系要明確,這也為后期維護(hù)代碼起到很好的輔助作用。

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

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

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

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

# coding:utf-8


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


def run():
    return '貓會(huì)跑'


def jump():
    return '貓會(huì)跳'

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

包的導(dǎo)入 - import

如果想要使用一個(gè) 包 或者 模塊 ,就需要先將其導(dǎo)入到我們當(dāng)前的腳本中。在學(xué)習(xí) python 腳本結(jié)構(gòu) 的章節(jié),我們?cè)?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 這個(gè)文件
# 并且 import 只會(huì)拿到當(dāng)前對(duì)應(yīng)包下的 __init__.py 中的功能或當(dāng)前模塊下的功能

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

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

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

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

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

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

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

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

# 用法:
from package import module

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

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


# 示例如下:

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)用

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

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

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

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

# coding:utf-8


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

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

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

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

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

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

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

強(qiáng)大的第三方包

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

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

什么是第三方包

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

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

如何安裝第三方包

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

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

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

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

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

這里也推薦大家一個(gè) python 程序員的寶藏網(wǎng)站,github.com 搜索 python 第三方包 (github 會(huì)伴隨程序員的完整職業(yè)生涯);在 github 有很多程序員公開出來的第三方包,自然也有 python 的。需要注意的是 github 是一個(gè)國外的網(wǎng)站,所以訪問的有點(diǎn)慢,大家可以 ke 、xue、shang、wang ?;蛘咭部梢耘R時(shí)使用 國內(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)

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

安裝第一個(gè)第三方包工具 - ipython

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

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

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

這里看到,我們安裝失敗了;利用我們上面說的方法 kexue、shang、wang 的方式們?cè)俅伟惭b

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

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

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

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

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

pip 安裝拓展

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

在這種情況下,我們國內(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   # 指定版本號(hào)安裝

pip 安裝第三方包的卸載

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

# 卸載方法:

pip uninstall ipython

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

總結(jié)

今天該章節(jié)主要介紹了什么是包,什么是模塊。如何導(dǎo)入包、模塊,導(dǎo)入子包、主包如何調(diào)用他們的函數(shù)。最后又講述了如何安裝、使用、卸載第三方包。

以上就是Python學(xué)習(xí)之包與模塊詳解的詳細(xì)內(nèi)容,更多關(guān)于Python包 模塊的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python數(shù)據(jù)庫PooledDB連接池初始化使用示例

    python數(shù)據(jù)庫PooledDB連接池初始化使用示例

    這篇文章主要為大家介紹了python數(shù)據(jù)庫PooledDB連接池初始化使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • python logging模塊的使用總結(jié)

    python logging模塊的使用總結(jié)

    這篇文章主要介紹了python logging模塊使用總結(jié)以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。,需要的朋友可以參考下
    2019-07-07
  • 詳解Python之可迭代對(duì)象,迭代器和生成器

    詳解Python之可迭代對(duì)象,迭代器和生成器

    這篇文章主要為大家介紹了Python之可迭代對(duì)象,迭代器和生成器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Python實(shí)現(xiàn)制作銷售數(shù)據(jù)可視化看板詳解

    Python實(shí)現(xiàn)制作銷售數(shù)據(jù)可視化看板詳解

    在數(shù)據(jù)時(shí)代,銷售數(shù)據(jù)分析的重要性已無需贅言。只有對(duì)銷售數(shù)據(jù)的準(zhǔn)確分析我們才有可能找準(zhǔn)數(shù)據(jù)變動(dòng)的原因。本文將介紹用Python制作銷售數(shù)據(jù)大屏的方法。感興趣的可以關(guān)注一下
    2021-11-11
  • django-rest-framework 自定義swagger過程詳解

    django-rest-framework 自定義swagger過程詳解

    這篇文章主要介紹了django-rest-framework 自定義swagger過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 使用python matploblib庫繪制準(zhǔn)確率,損失率折線圖

    使用python matploblib庫繪制準(zhǔn)確率,損失率折線圖

    這篇文章主要介紹了使用python matploblib庫繪制準(zhǔn)確率,損失率折線圖,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 更新修改后的Python模塊方法

    更新修改后的Python模塊方法

    在本篇內(nèi)容中我們給大家整理了關(guān)于如何更新修改后的Python模塊的具體步驟和方法,有興趣的朋友們學(xué)習(xí)下。
    2019-03-03
  • python中出現(xiàn)invalid?syntax報(bào)錯(cuò)的幾種原因分析

    python中出現(xiàn)invalid?syntax報(bào)錯(cuò)的幾種原因分析

    這篇文章主要介紹了python中出現(xiàn)invalid?syntax報(bào)錯(cuò)的幾種原因分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python 一句話生成字母表的方法

    Python 一句話生成字母表的方法

    今天小編就為大家分享一篇Python 一句話生成字母表的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 使用OpenCV實(shí)現(xiàn)道路車輛計(jì)數(shù)的使用方法

    使用OpenCV實(shí)現(xiàn)道路車輛計(jì)數(shù)的使用方法

    這篇文章主要介紹了使用OpenCV實(shí)現(xiàn)道路車輛計(jì)數(shù)的使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評(píng)論