首页 > 解决方案 > 如何将可选的python参数传递给带有可选参数的子函数

问题描述

给定一个带有可选参数的简单 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's 默认值,例如调用它do_and_wait()会导致 TypeError,因为在wait秒内 == None。

有没有一种简单而干净的方法来完成这项工作?我知道我可以像这样滥用 kwargs:

def do_and_wait(message, **kwargs):
    print(message)
    wait(**kwargs)

但是这个函数的读者和用户似乎不清楚,因为参数上没有有用的名称。

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

标签: pythonpython-3.x

解决方案


我认为您没有完全解释您的问题,因为我不希望答案会这么简单,但我只会在 do_and_wait() 中使用与 wait() 相同的默认值(和数据类型),像这样:

def do_and_wait(message, seconds=3):
    print(message)
    wait(seconds)

推荐阅读