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