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

退休的龍叔 2021-09-18 05:56:28 阅读数:410

python 保姆 新手 手快 快速

前言

這是新手教程的第四期了,前面已經出過了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新手入門教程專欄

版权声明:本文为[退休的龍叔]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/09/20210918055627422a.html