繁体   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