日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python學習之包與模塊詳解_python

作者:渴望力量的哈士奇 ? 更新時間: 2022-05-21 編程語言

大家好,學完面向對象與異常處理機制之后,接下里我們要學習 包與模塊 。首先我們要了解什么是包?什么是模塊?接下來我們還要學習 如何自定義創建包、自定義創建模塊以及如何導入包與模塊。最后我們在學習如何使用第三方包,第三方包就是別人開發好的包。關于包的課程學完之后,就是文件的讀寫,通過學習這方面的知識,可以讓我們動態的創建文件、編輯文件、閱讀文件。當我們具備文件的基礎讀寫能力之后,我們就可以學習一些相關的模塊了,如 yaml文件模塊、json文件與模塊、日志模塊....

接下來我們就開始學習 包與模塊 ,通過學習該部分之后,我們就可以靈活運用 Python 在各個領域中了。比如 web 開發,我們就可以使用 web 相關的包與模塊。有很多人在為 python 做貢獻,他們貢獻的就是這些 包與模塊。而之前我們學習的課程,也都是在為我們學習包與模塊在做準備,一句話總結,學會 包與模塊 是真正學會 Python 的重要標志。

什么是 Python 的包與模塊

  • 包的定義:簡單粗暴的解釋,當一個文件夾內包含一個 __init__.py 文件時我們就可以認為它是一個包;如果該文件夾下還有子文件夾且該子文件夾中也有一個 __init__.py 文件,我們就可以認為它是包中還有包。
  • 模塊的定義:任何 *.py 格式的文件都可以當作模塊,我們可以使用 import 關鍵字對其執行導入操作。

我們都知道每一個模塊下都是 Python 的函數,所以我們使用一個包或者模塊,最終的目的就是使用他們內部函數的功能幫助我們實現業務需要。

一個包里,可以有一個或多個模塊;通過調用 包 下面某個 模塊 的某個函數去執行,這就是我們使用 Python包或模塊的目的

包的身份證

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

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

如何創建包

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

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

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

創建包的小練習

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

同樣的方法在 dog 子包內創建 action.py 模塊,內容如下:

# coding:utf-8


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


def run():
    return '貓會跑'


def jump():
    return '貓會跳'

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

包的導入 - import

如果想要使用一個 包 或者 模塊 ,就需要先將其導入到我們當前的腳本中。在學習 python 腳本結構 的章節,我們曾經介紹過,在腳本的頂部為 頭部注釋 區域;接下來就是 導入區域 ,導入區域 就是將我們需要的包、模塊導入到我們當前的腳本中。接下來 我們看一下 包的導入 import 關鍵字的用法:

# 用法:
import package

# 參數:
# package:被導入的包的名字

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

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

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

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

然后退出我們的 python 解釋器再進入,為什么要退出呢?這是因為我們的包的當前結構發生了變化,所以需要退出再重新進入,否則 在 Treminal 終端執行的仍然是之前的結果。這個時候我們再重新 import animal 的包,然后執行以下看看。

這時候在結合剛剛我們說的 import 只會拿到當前對應包下的 __init__.py 中的功能或當前模塊下的功能 , 如果想要調用一個包中或者模塊中的函數函數功能,只需要通過包或者模塊的名稱 + . 的形式去調用它的函數名就可以了。這個方法是不是和我們面向對象的使用方式很相似呢?

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

模塊的導入 - from…import

接下來我們學習如何通過包導入對應的模塊,這一次我們需要 fromimport 兩個關鍵字來配合了;當這兩個關鍵字配合起來之后,就可以通過某個包找到對應的模塊。接下來 我們看一下 from...import... 的用法

# 用法:
from package import module

# 參數:
# package:要導入的包名
# module:包中的目標模塊

# from package import module 的意思就是 從當前的包中導入某個模塊


# 示例如下:

from animal import dog
dog.run()

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

接下來我們嘗試 參照上文的 animal 包 導入 dog 的子包 調用里面的 run 函數,內容如下:

導入子包及子包函數的調用

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

現在我們是直接通過導入模塊來調用 action 模塊下的函數,那可不可以直接調用函數來使用的呢?嘗試一下:

導入主包及主包的函數調用

首先我們在主包 animal 的子包同級路徑下創建一個 main.py 文件,并定義一個 main 函數,然后再進行調用。內容如下:

# coding:utf-8


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

然后我們調用該 main.py 文件的 animal 函數

導入的包與子包模塊之間過長如何優化

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

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

接下來 我們嘗試一下 在 animal 包 同級別下創建一個 animal_test.py 文件,然后在 animal_test.py 文件內導入 子包獲取其函數。

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

強大的第三方包

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

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

什么是第三方包

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

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

如何安裝第三方包

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

隨著 python 的發展越來越快,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 包名 就可以進行下載并安裝。

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

pip 安裝 第三包

# 查詢當前 pip 版本:
pip -V

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

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

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

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

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

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

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

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

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

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

當然了如果默認是進入我們其他版本的 python 或者 ipython 我們可以通過 python3 或者 ipython3 的命令進入到我想要進去的版本的交互終端。

注意:在我們平時執行一個腳本的時候,我們還是推薦使用 python 解釋器,ipython 只是作為我們的一個調試環境使用。

pip 安裝拓展

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

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

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

# 國內源地址
# 阿里云:http://mirrors.aliyun.com/pypi/simple/ 
# 中國科技大學:https://pypi.mirrors.ustc.edu.cn/simple/
# 豆瓣:http://pypi.douban.com/simple/
# 清華大學:https://pypi.tuna.tsinghua.edu.cn/simple/
# 中國科學技術大學: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

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

總結

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

原文鏈接:https://blog.csdn.net/weixin_42250835/article/details/123585744

欄目分類
最近更新