✍Python【模組與包】保姆式教學,新手快速入門

2021-09-18 11:00:02

👳前言

這是新手教學的第四期了,前面已經出過了Python的基礎入門、物件導向程式設計和正則三期,今天的內容是Python的模組與包。
在這裡插入圖片描述
如果你還沒有看過前面的教學,有時間可以回去看一下,歡迎訂閱我的專欄,這個系列的文章都會放在專欄裡面,學完你就能無障礙進階Python的任何方向。

Python新手入門教學專欄

模組與包在Python當中使用得不可謂不頻繁,Python之所以程式碼量少、開發速度快,模組與包占據了非常大的原因,這也是新手在進階爬蟲、資料分析、web開發等方向必須掌握的技能。



👳一、模組

(一)定義

模組指的是Python的程式檔案(原始檔),模組的檔名就是模組名加上.py,裡面包含了Python物件定義和Python語句,模組包含了定義函數、類和執行程式碼等等,一般情況下不要去修改模組,以免模組失效。


(二)模組匯入

Python中允許匯入的形式來進行模組呼叫,Python中的模組也是物件,模組中定義的所有全域性變數,匯入後都成為模組的屬性。

1.語法1: import 模組名

如果要匯入多個模組,可以只用1個import來匯入多個模組,多個模組之間用逗號隔開即可,但是在Python的PEP8風格里面,不建議這麼做,所以要匯入幾個模組,就寫幾個import來進行挨個匯入。

例子:匯入math模組並呼叫sqrt()開平方的功能對9進行開平方

import math
num = math.sqrt(9)
print(num)

輸出結果:

3.0

提示一下,在Python中進行運算操作預設返回的是float型別,所以是3.0。

2.語法2: from 模組名 import 功能1,功能2

注意這裡的功能後面不加括號。

例子:匯入math模組並呼叫sqrt()開平方的功能對9進行開平方

from math import sqrt
num = sqrt(9)
print(num)

輸出結果:

3.0

3.語法3:from 模組名 import

一般情況下,這個語法可以匯入模組的所有功能,當你要用某個模組的多個功能的時候,就不用挨個寫了,這裡我就不舉例了,都是一樣的。

注意點

這個方式並非在所有情況下都能匯入模組中的所有功能,
如果模組中有__all__=["功能1","功能2"]這樣的宣告,
那麼匯入的模組只能用功能1和功能2,
如果模組中還有功能3等等功能,但是沒有在__all__=[列表]中宣告,則無法呼叫。

例子:(這個例子需要看完下面的自定義模組才看得懂)

新建了1個叫module1的模組,模組程式碼有2個功能:

def fun1() : #實現a+b並輸出結果
    print("fun1")

def fun2() : #實現a+b並輸出結果
    print("fun2")
__all__ = ["fun1"]  #宣告只能呼叫fun1()

在另一個Python檔案中用語法3的方式匯入模組中的所有方法:

from module1 import *
fun1()
fun2()

執行結果只列印出來fun1,然後就報錯提示fun2()沒有被定義,無法識別,這就是因為

在module1中用__all__宣告了可呼叫的方法只有fun1()。

(三)定義別名

有的模組或者模組內的功能名字比較長,多次使用的時候不方便,可以進行自定義模組或者功能的名字。

1.模組自定義別名: import 模組名 as 別名

例子:自定義time模組為別名t並使用。

import time as t
t.sleep(3)  #延遲三秒
print("hello world")

程式執行3秒後輸出:

hello world

2.功能自定義別名: from 模組名 import 功能名 as 別名

例子:匯入time模組並自定義sleep()功能為s這個名字

from time import sleep as s
s(5)	#延時5秒
print("hello world")

程式執行5秒後輸出:

hello world

(四)自定義模組

每個人都能生成自定義模組來進行呼叫,自定義模組就是Python檔案,我們寫程式碼時建立的Python檔案就相當於1個模組。

注意點:被呼叫的模組儘量放在當前Python檔案相同目錄下,否則匯入時要宣告所在資料夾才能匯入。

例子:自定義1個模組,在另一個Python檔案中進行呼叫。

新建1個名為module1的Python檔案,程式碼如下:

def fun1(a,b) : #實現a+b並輸出結果
    print(a+b)

相同目錄下新建另一個Python檔案,呼叫module1.py這個模組:

import module1
module1.fun1(20,30)

執行當前Python檔案結果:

50

(五)模組的測試

每個模組匯入的時候都預設被執行一遍,但同時在模組內部又存在著很多的內部測試程式碼,為了避免匯入模組時執行了模組內部的測試程式碼,於是就牽扯到一個方法:

很多模組在內部都有測試方法:
if __name__ == "__main__":
	程式碼1

這個方法能夠實現一個功能,在模組中執行的話,就會執行程式碼1的程式碼,在其他檔案匯入該模組的時候,則不會執行程式碼1的程式碼,所以一般模組內部的測試都放在了程式碼1當中。

為什麼?神奇的點就在於__name__,它在當前檔案中執行的結果是__main__,在其他檔案匯入時執行的結果是模組名,所以利用這一點,用上if語句就能判斷模組執行到底是在當前檔案執行還是被匯入執行。

舉例:

新建1個Python叫module1,作為模組,程式碼如下:

print(__name__) #列印__name__

執行結果:

__main__

再新建1個Python檔案,匯入剛才建好的module1.py模組:

import module1

執行結果:

module1

在當前檔案的執行和被匯入時執行,結果是不一樣的,所以它成為了模組的內部測試方法。

注意點:在自定義的模組中,不建議寫while循壞,不然匯入的過程中一直在執行模組裡面的while循壞,可能會跳不出來,也就是一直在匯入模組,其他程式碼執行不到。


👳二、包

(一)定義

包就是將有聯絡的模組放在同一個資料夾下,並且該資料夾裡有「__init__.py」這個檔案,這個資料夾就叫做包。

包的特徵:

1.包也是物件
2.必須有__init__.py檔案
3.__init__.py檔案是包的構造方法,控制著包的匯入行為,一般是個空包
4.包裡面不僅可以有模組,還可以有子包

(二)包的建立

在Pycharm軟體中新建1個專案檔案,建立完成後,開啟Pycharm建立1個專案資料夾→點選資料夾→右鍵彈出選項→New→Python Package→完成建立,建立的新資料夾就是包,裡面自動建立了init檔案。

在這裡插入圖片描述


(三)包的匯入

常規匯入方法主要有2種。

方法1:import 包名.模組名.目標

方法2:import 包名.子包.模組名.目標

這裡所說的目標可以是變數、函數等等物件,具體的在下面會講到。


(四)包的使用

使用形式1:常規使用1

import 包名.模組名
包名.模組名.功能

舉例:建立1個包,在另一個.py檔案中使用,要求.py檔案不包含在建立的包內。

步驟1,開啟Pycharm新建一個專案,建立1個包,命名為demo,包裡面新建1個.py檔案,命名為my_module,程式碼如下:

a = 100
def fun1():
    print("這是1個包")

步驟2,開啟另1個.py檔案,匯入已建立的包

import  demo.my_module
print(demo.my_module.a)
demo.my_module.fun1()

執行結果:

100
這是1個包

使用形式2:常規使用2

from 包名 import 模組名
模組名.功能
模組名.變數

舉例:我沿用上面已經建立好的demo包,直接在步驟2中修改程式碼,用這個新方式去匯入包並使用。

from demo import my_module
print(my_module.a)
my_module.fun1()

執行結果是一樣的:

100
這是1個包

使用形式3:另起別名並使用

import 包名.模組名 as 別名
別名.功能
別名.變數

上面使用形式1中可能有人會發現,匯入模組後的使用不太方便,又要包名又要模組名的,能不能簡單點?當然可以,直接給包裡的模組另起1個縮短的別名,後面直接用別名就可以了。

沿用上面的使用形式1的例子,這裡我就不改動步驟1了,我直接在步驟2中進行另起別名。

import  demo.my_module as n1    #另起別名為n1
print(n1.a)
n1.fun1()

執行結果:

100
這是1個包

結果是一樣的,但如果程式碼比較長的話,使用別名會方便很多。

當然了,這裡也可以用使用形式2的方式匯入包並另起別名,使用時用別名就可以了,這個方式我就不舉例了,你們自己可以去試試。

使用方式4:匯入某個功能

from 包名.模組名 import 功能1
功能1

這裡我也沿用已建立好的包,直接在另一個.py檔案中進行使用。

from demo.my_module import fun1
fun1()

執行結果:

這是1個包

使用方式5:匯入所有功能

在模組匯入的時候我們介紹了import * 這個方式去匯入模組裡面的所有功能,在這裡也可以這麼入匯入包裡面的模組的所有功能。

舉例,名叫「demo」包裡面有1個模組叫「hhhh」,模組的程式碼如下:

def fun1(): 
    print("這是功能1")
def fun2():
    print("這是功能2")

然後我們在另一個.py檔案中呼叫一下;

from demo.hhhh import *
fun1()
fun2()

執行結果:

這是功能1
這是功能2

6.關於all的使用

關於__all__的使用在模組的時候有介紹過,那是控制可以被匯入的功能列表,但在包裡面,__all__是控制可以被匯入的模組列表,即宣告哪些模組可以被匯入。

包裡面的__all__是在__init__檔案中宣告的,而不是在哪個模組中寫的。

舉例:一個包裡面有多個模組,其中被all宣告的模組可以被匯入,不宣告的不可以被匯入。

步驟1,在名為demo的包裡面有hhhh和my_module兩個模組,但在int檔案中被all宣告只有hhhh檔案可以使用,int檔案的程式碼如下:

__all__ = [
    "hhhh"  # hhhh模組允許被匯入
]

步驟2,在新的.py檔案中匯入demo包裡面的hhhh和my_module兩個模組:

from demo import *	#匯入包裡面的所有模組
hhhh.fun1()		#呼叫hhhh模組的fun1功能,輸出「這是功能1」
my_module.fun1()	#呼叫my_module模組的fun1功能,輸出「這是1個包」

執行結果:

在這裡插入圖片描述

很明顯,雖然用 * 匯入了所有模組,但被all宣告可匯入的hhhh模組是可以被使用的,沒被all宣告的my_module模組是不能使用的,系統無法識別。


👳三、模組與包的作用

1.提高程式碼的可重用性。好用的程式碼不止你1個人可以用,很多人都可以重複使用它。

2.提高程式碼的可讀性。如果所有的程式碼都放在1個.py檔案中,那程式碼就太長了,增加了理解和維護難度,所以可以把一些常用的程式碼封裝成包和模組,起1個望文生義的名字,需要的時候直接用就行,減少了程式碼的數量,提高了可讀性。

3.減少程式碼的冗餘。模組裡面封裝的一些方法,我們直接給引數去使用就可以了,不用把方法再寫一遍,佔用記憶體,也就減少了程式碼的冗餘。


👳四、第三方庫的安裝

Python雖然有很多自帶的模組和包,簡稱內建模組,但只會使用內建模組還不夠,畢竟內建模組有限,我們經常會用到第三方的庫,這個時候學習怎麼安裝第三方的庫(包)是很必要的。

今天來介紹3種第三方模組與包的安裝方法。

1.通過pip安裝

可以通過包管理命令pip去進行第三模組與包的下載和安裝,前提是你安裝的Python是照著我前面在【Python基礎入門】那篇文章所講的方式去安裝,所有的選項都勾選了,這樣你就不用設定環境變數了,首先檢視一下你的pip是否能用。

方法:WIN+R調出執行視窗→輸入cmd→如果出現下面的pip資訊則是可以使用pip

在這裡插入圖片描述
如果出現紅字提示「cmd中 ’pip‘不是內部或外部命令,也不是可執行的程式或批次檔」,那麼你就手動設定一下環境變數吧,實在不行就回過頭跟著我說的安裝Python的步驟去重新裝吧。

回到pip如何安裝第三方模組與包的問題,首先我們得知道我們要安裝的第三方模組與包是叫什麼名字,比如Pillow這個第三方庫,這是Python下非常強大的處理影象的工具庫,安裝方法是:

1.WIN+R調出執行視窗
2.輸入cmd
3.輸入 pip install Pillow
4.等待下載和安裝的完成

請新增圖片描述

有時候會出現很多紅字提示下載失敗,這個很正常,原因可能是:

(1).pip版本過低,升級一下pip版本,在黑視窗輸入:python -m pip install -U pip

(2)網路不好,多下載幾遍就可以了


2.通過Pycharm安裝

通過pip安裝是不需要開啟軟體的,但我們也可以通過Pycharm進行安裝,方法如下:

點選左上角的 File → Settings → Project:專案名 → Python interpreter → 點選 + →
輸入你想安裝的包名,選擇你看上的 → 點選 Install Package → 等待下載和安裝

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述


3.通過渠道下載.whl檔案安裝

可以通過官網等渠道去搜尋和下載你想要的包,官網:https://pypi.org/ ,搜尋你要下載的第三方庫,比如說Pillow這個庫,直接搜就可以了:

在這裡插入圖片描述

然後選擇你要下載的檔案,比如Pillow8.3.2這個版本,進入下載頁面,點選 Download files。

在這裡插入圖片描述
進去之後有很多的版本型號,建議選擇與你符合的版本,否則可能裝不了,這裡要注意Python版本、系統和電腦的位數。
在這裡插入圖片描述
比如說我的Python裝的是3.9.6的,所以我下的是cp39裡面的,電腦是64位元,用的是Windows系統,所以我下的版本是 Pillow-8.3.2-cp39-cp39-win_amd64.whl 這個檔案。
在這裡插入圖片描述
下載好之後,WIN+R 開啟命令列輸入CMD,在黑視窗中輸入 pip install 檔案路徑下的檔名,比如我下載後存放的路徑是D:\谷歌瀏覽器,所以我在黑視窗輸入的程式碼是:

pip install D:\谷歌瀏覽器\Pillow-8.3.2-cp39-cp39-win_amd64.whl

然後回車進行安裝,等待安裝完成。

在這裡插入圖片描述


👳結語

Python中的模組與包就先講到這裡了,有粉絲跟我說不知道該怎麼去看這個系列的博文,我這裡說明一下,下面這張圖是我這個系列的文章知識板塊的總覽,主要分成基礎入門和高階程式設計兩塊,跟著序號去學就可以。

在這裡插入圖片描述
比如說首先你才開始學Python,那你就看基礎入門的文章,這一塊的知識我都放成了一篇,學完之後再去看高階程式設計裡面的文章,跟著序號去找對應的文章就可以了,雖然有些板塊我還沒整理好,但後續會陸續更新這一塊的內容的。

Python新手入門教學專欄