如何将可选的python参数传递给带有可选参数的子函数

时间:2019-08-07 00:22:39

标签: python python-3.x

给出一个带有可选参数的简单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)

但是,由于该参数上没有有用的名称,因此对于该函数的读者和用户而言,这似乎还不清楚。

注意:这是一个愚蠢的简化示例。

3 个答案:

答案 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