在一般使用關鍵字引數時,都會先定義好資料型態,那有沒有其他方法可以更動態的去設定關鍵字引數?
在 Python 函式中,可以使用 None
和 Docstrings
來指定動態的預設引數。這使得函式的使用更靈活,同時能夠提供清晰的文檔。
"Docstrings
" 是 "Documentation Strings" 的簡稱,是在 Python 中用來描述模塊(module)、函式(function)、類別(class)等的說明字符串。這些字符串的主要目的是提供對代碼的文檔,以便開發者和使用者能夠理解代碼的功能、使用方法和細節。
def dynamic_argument(value=None):
"""
函式接受任意資料型態的引數,預設為 None。
Parameters:
- value: 任意資料型態的引數,預設為 None。
Returns:
str: 處理後的結果。
"""
if value is None:
return "No value provided."
else:
return f"Provided value: {value} ({type(value).__name__})"
# 使用例子
print(dynamic_argument()) # No value provided.
print(dynamic_argument(42)) # Provided value: 42 (int)
print(dynamic_argument("Hello, world!")) # Provided value: Hello, world! (str)
print(dynamic_argument([1, 2, 3])) # Provided value: [1, 2, 3] (list)
我們來設計可以印出含有時間的Log訊息,利用datetime.datetime.now()
來獲取現在時間,在把它導入到關鍵引數,這樣應該就可以了吧?
我們來記錄吃早餐,吃了十秒就吃完了在印出done,看會跑出什麼?
import logging
import datetime
import time
def log_message(message, when = datetime.datetime.now()):
print(f'{when},{message}')
log_message('eat breakfast')
time.sleep(10)
log_message('done')
疑,怎麼兩個時間是一模一樣的,阿~def log_message(message, when = datetime.datetime.now()):
這個算預設引數的概念,只會在函式被定義時,只會執行一次。
我們利用None
和 Docstrings
來指定動態的預設引數的觀念來重新設計一次吧,這次我們加入了可以自行輸入時間或不輸入時間的方式。
利用串列運算式的方法,若when
是None的話就輸出現在時間。
import logging
import datetime
import time
def log_message(message, when = None):
'''
Args:
message: Mesage to print
when: default of the present time
'''
when = datetime.datetime.now() if when is None else when
print(f'{when},{message}')
log_message('eat breakfast')
time.sleep(3)
log_message('done')
含有時間的Log訊息,time.sleep(3)
延遲三秒,有跟著改變了
讓我們自行輸入時間看看,是否也行。
我們利用None
和 Docstrings
來指定動態的預設引數的觀念,來讓函式更有彈性,可以輸入不同型態的關鍵字引數,讓程式具備更多的彈性,在事件紀錄時間的Log訊息的範例中詮釋了,可自行輸入時間或者預設導入系統的時間,在可能跟其他程式交握時,可以更靈活的應用,對方傳送的訊息可能含有時間紀錄或None
皆可行。