给出一个带有可选参数的简单Python函数,例如:
def wait(seconds=3):
time.sleep(seconds)
如何创建一个调用此函数并传递可选参数的函数?例如,这不起作用:
def do_and_wait(message, seconds=None):
print(message)
wait(seconds)
注意:我希望能够使用可选的wait
参数从其他函数调用seconds
,而不必知道并复制当前的默认seconds
基础wait
函数中的值等于调用它的其他所有函数。
如上所述,如果我使用诸如do_and_wait(2)
之类的可选参数来调用它,则它可以工作,但是尝试依靠wait
的默认值,例如像do_and_wait()
那样调用会导致TypeError,因为在wait
秒内==无。
有没有简单而干净的方法可以完成这项工作?我知道我可以像这样滥用kwargs:
def do_and_wait(message, **kwargs):
print(message)
wait(**kwargs)
但是,由于该参数上没有有用的名称,因此对于该函数的读者和用户而言,这似乎还不清楚。
注意:这是一个愚蠢的简化示例。
答案 0 :(得分:1)
我不认为您已经完全解释了问题,因为我不希望答案这么简单,但是我只会在do_and_wait()中使用与wait()相同的默认值(和数据类型) )的用法,如下所示:
def do_and_wait(message, seconds=3):
print(message)
wait(seconds)
答案 1 :(得分:1)
我了解您已简化了您的问题,但我想您的意思是如何使用可选参数(可能为None)调用函数。以下内容对您有用吗?
import time
def func1(mess, sec):
if sec != None:
time.sleep(sec)
print(mess)
func1('success', sec=None)
答案 2 :(得分:0)
再想一想,我想出了类似的东西;韩的回答暗示了这一点,并提醒我,我认为PEP甚至在某处提出了建议。这样特别避免了必须知道默认值并将其复制到任何调用select 23 as weeknumber,
date_format(date_sub(from_unixtime(unix_timestamp('2018-12-29','yyyy-MM-dd')+(23*7*24*60*60)),pmod(datediff(from_unixtime(unix_timestamp('2018-12-29','yyyy-MM-dd')+(23*7*24*60*60)),'1900-01-07'),7)),"MMMMM dd,yyyy") as startday,
date_format(date_add(from_unixtime(unix_timestamp('2018-12-29','yyyy-MM-dd')+(23*7*24*60*60)),6 - pmod(datediff(from_unixtime(unix_timestamp('2018-12-29','yyyy-MM-dd')+(23*7*24*60*60)),"1900-01-07"),7)),"MMMMM dd,yyyy") as endday;
并希望支持wait
的变量的函数中。
seconds