Skip to content

[Python] 基本教學(12) Import package: time, datetime, math

在我們開始之前,我希望能簡單闡述下 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,這樣我們需要用的時候就不用再自己從頭刻啦!


References


Read More

Leave a Reply