在 Python 中使用關鍵字引數

已完成

選擇性引數需要加以指派的預設值。 這些具名引數稱為「關鍵字引數」。 關鍵字引數值必須在函式本身中定義。 當您呼叫使用關鍵字引數所定義的函式時,完全不需要使用這些引數。

Apollo 11 任務需要大約 51 小時的時間才能到達月球。 讓我們建立一個函式,以使用與 Apollo 11 任務相同的值作為預設值,傳回預估抵達時間:

from datetime import timedelta, datetime

def arrival_time(hours=51):
    now = datetime.now()
    arrival = now + timedelta(hours=hours)
    return arrival.strftime("Arrival: %A %H:%M")

函式會使用 datetime 模組來定義目前的時間。 其會使用 timedelta 來允許產生新時間物件的加法作業。 計算該結果之後,其會傳回格式化為字串的 arrival 估計。 請嘗試在沒有任何引數的情況下加以呼叫:

arrival_time()
Arrival: Saturday 16:42

雖然函式定義了關鍵字引數,但是當您呼叫函式時,其不允許傳遞引數。 在此情況下,hours 變數預設為 51。 若要確認目前的日期正確無誤,請使用 0 作為 hours 的值:

arrival_time(hours=0)
Arrival: Thursday 13:42

混合引數與關鍵字引數

有時候,函式需要引數與關鍵字引數的組合。 在 Python 中,此組合會遵循特定順序。 引數一律先宣告,後面接著關鍵字引數。

更新 arrival_time() 函式以採用必要的引數,這是目的地的名稱:

from datetime import timedelta, datetime

def arrival_time(destination, hours=51):
    now = datetime.now()
    arrival = now + timedelta(hours=hours)
    return arrival.strftime(f"{destination} Arrival: %A %H:%M")

因為您新增了必要的引數,所以不再需要任何引數即可呼叫函式:

arrival_time()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: arrival_time() missing 1 required positional argument: 'destination'

使用 "Moon" 作為 destination 的值,以避免發生錯誤:

arrival_time("Moon")
Moon Arrival: Saturday 16:54

您也可以傳遞兩個以上的值,但必須以逗號加以分隔。 大約需要 8 分鐘 (0.13 小時) 才能進入軌道,因此請使用該時間作為引數:

arrival_time("Orbit", hours=0.13)
Orbit Arrival: Thursday 14:11