在 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