簡體   English   中英

如何將可選的python參數傳遞給帶有可選參數的子函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM