Last Updated on 2021-04-07 by Clay
在我們開始之前,我希望能簡單闡述下 Package 這個概念。當然,有些時候針對這種『套件』稱呼為 Package 是我的習慣,如果你覺得我的說法有誤,歡迎隨時留言告訴我,因為在程式設計的領域中,我只是一個小小的菜鳥。
Package,就是 Python 中套件的概念。我們瀏覽網路上,可以看到大量的套件,這些套件多半都是由別人開發,當然你也可以自己寫,自己發佈。
有鑑於此,若能善用網路搜尋資料,我們多半能利用大量他人的套件來完成我們自己當前的 Project。這其實沒什麼不好,我並不認為每種功能都必須自己從底層刻起。
『避免重複造輪子』,這是程式設計裡頭一件很重要的事情。
所以,今天便請讓我來講解一下,關於如何在 Python 中使用這些方便的套件吧!(以 Python 自帶的三種模組為例)
匯入套件
首先,我們自然得先 Import (匯入) 這些 Package(這裡該稱為模組 module)。
import time
import datetime
import math
print(time.__name__)
print(datetime.__name__)
print(math.__name__)
Output:
time
datetime
math
以上,我們使用 "import" 這個指令,來匯入 Python 自帶的套件。
__name__ 幾乎是全部套件都會自帶的一個屬性,代表著這個套件的名稱。
除了像這樣把 import 整個 Module,你也可以只 import 你想要匯入的部份:
import time time.sleep(3) from time import sleep sleep(3)
這兩個都是讓整個程序停下來沉睡 3 秒,但後者是只 import sleep 這個模組而已。
有些時候,這會讓你的程式比較精簡,不會在呼叫大量 Package 時讓運行延遲。
除此之外,你也可以像這樣把所有這個套件底下的模組 import 進程式:
import time time.sleep(3) from time import * sleep(3)
當我們 import 進 * 這個符號時,意味著我們將所有模組都匯入了;故,我們可以再次直接調用 sleep,而非一定要指定告訴程式我們要調用 "time" 底下的 "sleep"。
對了,如果你嫌棄 Package 名稱實在太長、相當不好打,其實你也可以使用 as 來決定在你的程式裡頭你要怎麼稱呼這個 Package。
import datetime as dt print(dt.datetime.now())
Output:
2019-08-17 12:11:28.952152
比如說,像是把 datetime 套件稱呼為 dt。
以下,當我們調用到 dt 時,Interpreter 就會知道我們想要調用這個套件。
當然,你可以自己匯入自己寫的另外一個 Script 及其底下的函式。
大家不妨多試試這樣的功能哦!
time
進入 time 這個 Python 中非常常用的套件了。
time 有個常用的地方,便是在於使用 time.time() 來匯報時間。若是我們將其存起來,當作起點,然後執行程式 —— 等到結束時,我們再次呼叫 time.time(),並將當初起點的時間減去現在呼叫的 time.time(),我們便可以直觀地了解程式到底韻行了幾秒。
import time startTime = time.time() print('start time:', startTime) time.sleep(3) for n in range(10): print(n) print('end time:', time.time()-startTime)
Output:
start time: 1566015475.182165
0
1
2
3
4
5
6
7
8
9
end time: 3.0007588863372803
我們可以看到,系統運行的時間大部分都耗在我們讓系統 sleep 的時間了。真正程式跑那些迴圈、並印出結果的時間其實只佔了非常非常小的一部分。
以上就是 time 套件常用的兩個功能介紹:暫停、計時。
datetime
datetime,顧名思義,就是關於『日期』方面的套件。這是一個實用的套件,我曾經用這個套件來進行股票的爬蟲。(也許關於『股票』、『爬蟲』的議題,在這個 Python 基本教學結束以後我會開始撰寫。)
首先來看段 sample code:
import datetime print('Date:', datetime.datetime.now().date()) print('Time:', datetime.datetime.now().time())
Output:
Date: 2019-08-17
Time: 12:47:30.593110
這就是最基本的使用方法:呼叫 datetime.datetime.now()
來告訴我們目前的時間。
我想等到撰寫 Python 實戰教學的時候,會更常提到這個套件,畢竟在爬蟲當中常常需要確認日期 —— 包括今天、昨天、上個月、甚至十年前。
math
談到 math 這個套件,我就開始頭大。並不是因為我數學不好(雖然我數學真的不太好),而是 math 這個套件裡面的功能實在太多了。
以下將 math 裡頭所有的 function 列出:
- acosh(x)
- acos(x)
- asin(x)
- asinh(x)
- atan(x)
- atan2(y, x)
- atanh(x)
- ceil(x)
- cosh(x)
- degrees(x)
- e
- erf(x)
- erfc(x)
- exp(x)
- expm1(x)
- fabs(x)
- factorial(x)
- floor(x)
- fmod(x, y)
- frexp(x)
- fsum(iterable)
- gamma(x)
- gcd (a, b)
- hypot(x, y)
- ......
實在是太多太多了! 不知道大家有沒有感受到我報頭苦思、遲遲無法想到該挑幾個哪些來教學的那種壓迫感呢??
當然,如果今天你要刻 Machine Learning 的底層,那我相信你對這塊肯定比我還熟。(我們老闆常常會叫我們研究底層的處理啦,不過我跟 RA 總是皮皮地賴過去 XDD)
當然,還是非常歡迎各位自己去研究看看那些功能!大部分的功能其實高中就有教過了,只是這裡直接幫我們寫成 function,這樣我們需要用的時候就不用再自己從頭刻啦!