[python筆記] 13.python的module

前言:

這是 python 筆記系列的最後一節啦!(灑花~
這一節要提到的,幾乎沒有在前面出現過,如果你學習 python 是使用一些 coding online 的方式,應該也很少接觸到。不過如果你的志向在發展一個 python 產品或是專案,那麼這一節會是無比重要,可以幫你省下大把大把的青春歲月。

這一筆記就是關於模組( module )的,通常 python 本身就已經內建好一些模組供你使用,所以初學的時候不會察覺。有學過其他語言的,就可能在初學時後遇到,例如:C語言,一開始就帶著一個 #include。
廢話不多說,馬上一起來做筆記吧!

閱讀時間:10 分鐘

什麼是 module?

用一個生活化的比喻:鉛筆盒。
當你在上課時,你想要完成的任務就是紀錄筆記;當你在考試時,你想完成的任務就是作答;當你在向別人講解時,你需要完成的任務是讓對方理解。這些事情都有一個你要完成的任務,而鉛筆盒都可能在這些任務中出現,來幫助你更簡單、更快速、更好的完成。

模組就取自於此,一個工具箱的概念。
而工具箱也會因功能性而有不同的存在,例如:鉛筆盒就是放文具的工具箱;零件箱就是修理用的工具箱;書架是存放書的工具箱。
同理,通常會把相似類型的程式放在同一個模組裡,例如:公共資料模組,這個模組就會放著來自各種政府公開資料的呼叫程式。

今天工程師想開發的專案有二:一個是目的地導航,但遇到不好的天氣時,抵達目的地時間每十公里增加 5 分鐘;另一是智慧家庭的開燈功能,遇到雨天的時候比較暗的房間會開燈。這兩個專案類型非常不同,但都需要即時天氣資料的功能,這時候就可以利用模組,把天氣功能放進去。

相同功能,一樣的程式,能不寫就不要寫,能重複使用就重複使用,已知穩定的功能,對專案來說是不可缺少的。
模組讓人省心,又讓人省時間,如何不喜愛它呢?

如何使用 module?

使用模組需要使用到「import」這個命令。下面圖片就是使用的範例:

上面匯入模組其實主要只透過兩種方式:

import <module_name> # 第一種方式
from <module_name> import <function_name> # 第二種方式

那要如何使用模組裡的功能呢?

<module_name>.<function_name> () # 第一種匯入,執行 module 裡的 function
<function_name> () # 第二種匯入,直接呼叫 function_name 執行 function

你可能會想問?這兩種方式有什麼差別?哪一種比較好?
這兩種方式的差別在於匯入的東西是全部還是指定,第一種方式就是將該模組所有的功能都匯入你的專案,而第二種則是將指定的 function 匯入你的專案,其他的功能並沒有被專案取用。

至於哪種比較好呢?這因狀況而異,如果該模組裡面的大部分功能都很常被使用的話,就會建議使用第一種方式;相對的,如果模組只有少部分的功能被使用,那就只需要匯入指定的功能就好。

as 是什麼?

as <alias>,別名(alias),有時候模組的名稱太長,會在程式的撰寫上造成麻煩,因為需要花更多時間判斷是不是這個模組,尤其是當很多模組名稱都很長時,你會特別感謝這個設計。

眼尖的你,可能發現我的示範裡,前面兩個匯入似乎重複了。沒有錯,因為這是我在練習時故意,至於原因呢…,我們稍後說明。

module 裡通常是哪些東西?

工具箱通常都放什麼?

直接在這裡偷偷說,其實 module 就是一般的 python 檔案,不需要有任何額外的加工。

不過如果想要製作一個好的 module,就需要先知道 module 作為工具箱通常裡面都放些什麼?一樣用生活的例子,你會把什麼放進工具箱裡呢?是不是會直接放入一些專門用來做某件事的道具,還有一些標準化的工具,拿出來比一比就會知道要多大多長?module 也是一個道理。

module 常用的三個東西

第一個就是 function,這些 function 會具有特定的功能來完成指定任務,例子就是一開始提過的公共資料模組,可以設計有的 function 專門取得溫度,有的專門取得濕度等等。

第二個就是 value,也就是一些預設值。有些系統資料不好放在資料庫,就會以 module 的方式記錄。

第三個就是 object,可以想成這個模組專們存放模型的藍圖。假設你的系統是個農場,當你賣出一隻豬豬,就需要製造一隻新的小豬來補充,當你的農場足夠大有上萬隻動物,如果沒有藍圖集中的模組,就需要耗費很多時間去找到可以製造豬豬的程式。除此之外,存放再一起的好處是,當你某天想開第二間農場,也可以快速的將所有動物藍圖複製到新的農場。

知道模組常用的東西,就來回答上一小節筆記留下的問題,為什麼我要特別將 ttk 從 tkinter 這個模組中取出來使用。原因是因為 ttk 就屬於 object 類,而我程式裡會大量使用到 object 的 東西,再加上我的別名寫大部分人習慣的 tk,認為 tk.tkk.xxx() 讓我感覺有點繞,所以才獨立出來的。這是我自己的習慣,也不一定要這麼做。(另外 tkinter 也會被稱為 package,跟模組的差異只在規模大小不同,但在程式裡都認為模組)

怎麼建立自己的 module?

既然已經知道 module 本身其實與一般的 .py 檔案一樣,那麼有差的就只在 import 上了,只要你使用了 import ,那目標的 python 檔案就會成為使用中檔案的 module。

python 提供哪些好用的模組?怎麼用?

os 模組:操作本機的檔案
sys模組:與直譯器互動,獲得以記錄的函式或是已記錄的全域變數
math模組:數學運算,擴充對浮點數操作的不足
random模組:產生亂數用
time模組:time、datetime、calendar、timestamp

這些模組都是內建在 python 本身裡,不需要額外的 import 就能使用

結語

python 筆記系列到此就告一段落啦,不過 python 還有很多值得學的地方,我想以後還有機會跟大家分享我的 python 筆記,只是下次見面就不會是系列文,會以小知識的方式與大家見面,當然…成不成還得看流量、我的時間、天氣好不好等等xddd。最後想說,學習一個新語言沒有很難,但把學習的東西用電腦記下來,並且以系列文的方式呈現,是我的第一次嘗試,要謝謝給我這個機會的站長朋友,也謝謝一些我身邊令人懷念的朋友,以及不知名的你。

This article was written by 洋洋. Any similarities to other works are purely coincidental.

我們是 Be Good Tool
團隊由幾位工程師、設計師與PM組成
專注開發各種免費網站工具和推廣優質的APP
歡迎到我們的線上工具列表看看喔!