Python 為何那麼多人都喜歡,就是因為很多大佬給我們造好了“輪子”了,拿著大佬的輪子,我驕傲~
Python 模組的設計與應用模組是一個概念,它包含 1~N 個檔案,如果檔案是 Python 程式碼檔案(就是.py 結尾的檔案),那每個檔案中可以包含函式,類等內容。
在公司工作,很多專案都是協作開發來完成,一個專案後面可能存在很多工程師,為了開發方便,每個人負責的功能函式或者類都儘量封裝在一個模組中,模組英文請記住 module,有的地方叫做 庫,也有的地方叫做 包(package),對於現階段的你來說,當成一樣的內容就好。
網際網路上存在大量的開源模組,這些模組最大的優勢就是免費,很多時候使用這些模組能極大地提高編碼效率,這也是很多人喜歡 Python 的原因之一。
1 將函式放到模組中模組學習的過程,不能按照語法結構來學習,它是一種抽象的知識,是一種程式碼的設計方式。例如將寫好的函式放到模組中。
# 宣告一個宮保雞丁的函式def kung_pao_chicken(*ingredients): """ 這個函式用於輸出宮保雞丁的主料 """ print("宮保雞丁的主料有:") for item in ingredients: print(item)# 宣告一個魚香肉絲的函式def yu_shiang_shredded_pork(**args): """ 這個函式目的獲取使用者輸入進來的引數 """ print("魚香肉絲需要啥") for item in args.items(): print(item)
以上內容聲明瞭兩個函式,當然函式名你必須好評,翻譯的準確有意義。
接下來就將上面的函式整合到一個模組中去,建立一個新的檔案 stir_fry.py 然後將兩個函式複製到新的檔案中。
stir_fry.py 檔案包含那兩個函式
好了,完成任務,一個模組建立完畢了,這個 stir_fry.py 檔案就是一個模組。
你現在腦中肯定出現黑人問號臉了,What?這就完了。是的,完了,一個低配模組完成。
下面就可以拿著這個模組給別人使用去了。會寫模組成為大佬之後,就可以給新入行的菜鳥指點江山,寫模組了。
2 應用函式模組2.1 import 匯入模組在另一個檔案中,可以透過 import 模組名 匯入一個模組,例如匯入剛才建立的 stir_fry 模組。
注意要新建一個檔案,檔名隨意但是不要與模組同名。
import stir_fry # 注意匯入模組不能帶中劃線,所以模組的檔名也不能帶下劃線。
如果想要使用模組中的函式,只需要參考下述語法格式即可。
模組名.函式名稱()
透過 stir_fry 呼叫模組中的函式。
import stir_frystir_fry.kung_pao_chicken("黃瓜", "胡蘿蔔", "雞胸肉", "花生米")stir_fry.yu_shiang_shredded_pork(old="橡皮擦的魚香肉絲放魚", new="大佬的魚香肉絲不放魚")
當透過 import stir_fry 匯入模組之後,該模組內的所有函式都一次性匯入到新檔案中了。
2.2 匯入模組某個函式如果不想匯入模組的所有函式,而只匯入某個函式,使用一下語法可以解決該問題。
from 模組名 import 函式名
修改上一節案例:
from stir_fry import kung_pao_chickenkung_pao_chicken("黃瓜", "胡蘿蔔", "雞胸肉", "花生米")# 下面的函式無法呼叫,因為未匯入yu_shiang_shredded_pork(old="橡皮擦的魚香肉絲放魚", new="大佬的魚香肉絲不放魚")
直接匯入模組中的函式,使用時不需要透過 模組名. 的方式呼叫,直接書寫函式名即可。
匯入模組中多個函式
語法格式如下:
from 模組名 import 函式名1,函式名2,...
匯入模組所有函式
語法格式如下:
from 模組名 import *
2.3 as 別名
剛才透過模組匯入函式你應該發現一個潛在的問題,就是函式名稱太長怎麼辦,除了名稱太長,還存在一種情況,模組中的函式名稱與當前檔案中函式的名稱,存在重名的風險。此時可以學習一個新的內容,透過 as 給模組匯入進來的函式起個別名,然後在該檔案都使用別名進行編碼。
語法格式如下:
from 模組名 import 函式名 as 別名
上述內容應用到案例中如下述程式碼:
from stir_fry import kung_pao_chicken as paopao("黃瓜", "胡蘿蔔", "雞胸肉", "花生米")
as 別名也可直接作用於模組,語法格式如下:
import 模組名 as 別名
11.3 將類放到模組中隨著程式設計變得越來越複雜,只把函式放到模組中已經不能滿足要求了,需要將更高階的內容放到模組中,也就是類。
首先在 dog_module.py 檔案中定義一個類。
class Dog(): def __init__(self): self.name = "小狗" def say(self): print("汪汪汪")
此時的 dog_module 就是模組的名稱,而在該模組中只有一個類 Dog,也可以在該模組中多建立幾個類,例如:
class Dog(): def __init__(self): self.name = "小狗" def say(self): print("汪汪汪")class Cat(): def __init__(self): self.name = "小貓" def say(self): print("喵喵喵~")
3.1 import 匯入模組(類)
與匯入模組的函式部分知識一樣,如果希望匯入一個模組中的類,可以直接透過下述語法格式實現:
import 模組名
使用模組中的類,語法格式如下:
模組名.類名
具體程式碼不再演示,自行完成吧。
3.1 匯入模組某個類匯入模組的類和匯入模組的的函式用法是一致的。
新建一個 demo.py 檔案,在該檔案匯入 dog_module 模組中的類。
# 匯入 dog_module 模組中的狗類from dog_module import Dogdog = Dog()dog.say()
從模組中匯入多個類
該方式與函式的匯入也一致,語法格式如下:
from 模組名 import 類名1,類名2,類名3...複製程式碼
匯入模組中所有類
from 模組名 import *
學到這裡,你應該已經發現匯入模組中的函式與匯入模組中的類,從程式碼編寫的角度幾乎看不出區別,對比著學習即可。
匯入類的時候也可以應用別名,同樣使用 as 語法。
4 常見模組學習到這裡你對模組是什麼,模組怎麼用已經有了一個基本認知,接下來先不用自己寫一個特別牛的模組,我們先把一些常見的模組應用起來。
4.1 隨機數 random 模組透過隨機數模組可以獲取到一個數字,它的使用場景非常廣,例如遊戲相關開發、驗證碼相關、抽獎相關,學習了隨機數之後可以完成一些非常不錯的小案例。
randint 方法
匯入隨機數模組之後,可以透過 randint 方法隨機生成一個整數,例如下述程式碼:
import random # 匯入隨機數模組num = random.randint(1,10)print(num)
反覆執行程式碼會得到一個 1~10 之間的數字,由此可以 randint 方法中的引數含義。
randint(min,max) # min 最小值,max 最大值
你可以嘗試給 randint 函式起一個別名嗎?
choice 方法
透過 choice 方法可以配合列表實現一些效果,choice 可以隨機返回列表中的一個元素。
import random # 匯入隨機數模組play = random.choice(["足球", "籃球", "乒乓球", "棒球"])print(play)
如果你想知道 choice 方法的具體用法,還記得怎麼查詢嗎?
import random # 匯入隨機數模組print(help(random.choice))
shuffle 方法
該方法可以將一個列表的順序打亂。
import random # 匯入隨機數模組my_list = ["足球", "籃球", "乒乓球", "棒球"]random.shuffle(my_list)print(my_list)
簡單挑選了 random 模組中的三個方法做為說明,對於模組的學習,後面將為每個模組單開一篇文章書寫。
4.2 時間 time 模組時間模組是 Python 中非常重要的一個內建模組,很多場景都離不開它,內建模組就是 Python 安裝好之後自帶的模組。
time 方法 time 模組主要用於操作時間,該方法中存在一個 time 物件,使用 time 方法之後,可以獲取從 1970年1月1日 00:00:00 到現在的秒數,很多地方會稱作時間戳。
import timeprint(time.time())
輸出內容:
1606810686.3747146
sleep 方法 該方法可以讓程式暫停,該方法的引數是的單位是秒。
使用語法格式為:
import timetime.sleep(10) # 程式暫停 10 秒再執行
asctime 與 localtime 方法
以上兩個方法都可以返回當前系統時間,只是展示的形式不同。
import timeprint(time.asctime())print(time.localtime())
time 模組涉及的方法先只涉及這麼多,後續滾雪球學習過程中在繼續補充。
Python 還內建了很多模組,例如 sys 模組、os 模組、json 模組、pickle 模組、shelve 模組、xml 模組、re 模組、logging 模組等等內容,後續都將逐步學習到,有可能需要分開專題給大家講解。
5 總結Python 模組,快速編碼的一種途徑,很多時候第三方模組可以幫你解決大多數常見編碼場景,讓你在編碼的道路上飛奔。