[英]How to pass optional python arguments to sub-functions with optional arguments
給定一個帶有可選參數的簡單Python函數,例如:
def wait(seconds=3):
time.sleep(seconds)
如何創建一個調用此函數並傳遞可選參數的函數? 例如,這不起作用:
def do_and_wait(message, seconds=None):
print(message)
wait(seconds)
注意 :我希望能夠使用可選的seconds
參數從其他函數調用wait
,而不必知道並將底層的wait
函數中的當前默認seconds
值復制到其他調用它的函數中。
如上所述,如果我使用諸如do_and_wait(2)
類的可選參數來調用它,則它可以工作,但是嘗試依賴wait
的默認值,例如,像do_and_wait()
這樣調用它會導致TypeError,因為在wait
seconds == None內。
有沒有一種簡單而干凈的方法可以完成這項工作? 我知道我可以像這樣濫用kwargs:
def do_and_wait(message, **kwargs):
print(message)
wait(**kwargs)
但這對於該函數的讀者和用戶來說似乎不清楚,因為參數上沒有有用的名稱。
注意:這是一個愚蠢的簡化示例。
我不認為您已經完全解釋了問題,因為我不希望答案這么簡單,但是我只會在do_and_wait()中使用與wait()相同的默認值(和數據類型),像這樣:
def do_and_wait(message, seconds=3):
print(message)
wait(seconds)
我了解您已簡化了您的問題,但我想您的意思是人們如何調用帶有可選參數(可能為None)的函數。 以下內容對您有用嗎?
import time
def func1(mess, sec):
if sec != None:
time.sleep(sec)
print(mess)
func1('success', sec=None)
經過多想之后,我想到了類似的東西。 韓的回答暗示了這一點,並提醒我,我認為PEP甚至在某處提出了建議。 這尤其避免了必須知道默認值並將其復制到任何調用wait
並希望在seconds
支持變量值的函數中。
def wait(seconds=None):
time.sleep(seconds if seconds is not None else 3)
def do_and_wait(message, seconds=None):
print(message)
wait(seconds)
def something_else(callable, seconds=None):
callable()
wait(seconds)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.