更新於 2024/01/21閱讀時間約 5 分鐘

[Python基礎]使用 None 來指定動態的預設引數

在一般使用關鍵字引數時,都會先定義好資料型態,那有沒有其他方法可以更動態去設定關鍵字引數?

在 Python 函式中,可以使用 NoneDocstrings 指定動態的預設引數。這使得函式的使用更靈活,同時能夠提供清晰的文檔。

"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訊息

我們來設計可以印出含有時間的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()):這個算預設引數的概念,只會在函式被定義時,只會執行一次。

我們利用NoneDocstrings 指定動態的預設引數的觀念來重新設計一次吧,這次我們加入了可以自行輸入時間或不輸入時間的方式。

利用串列運算式的方法,若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)延遲三秒,有跟著改變了

記錄時間有動態改變了

讓我們自行輸入時間看看,是否也行。

自行輸入時間

總結

我們利用NoneDocstrings 指定動態的預設引數的觀念,來讓函式更有彈性,可以輸入不同型態的關鍵字引數,讓程式具備更多的彈性,在事件紀錄時間的Log訊息的範例中詮釋了,可自行輸入時間或者預設導入系統的時間,在可能跟其他程式交握時,可以更靈活的應用,對方傳送的訊息可能含有時間紀錄或None皆可行。


謝謝大家觀看~ 希望大家會喜歡,喜歡的話可以給愛心~追蹤一下,不會漏掉之後的文章喔~





分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.