Python包装函数丢弃参数

时间:2014-11-29 15:34:18

标签: python function arguments

我有一个设置,其中事件处理程序始终是采用单个事件参数的函数。

但通常情况下,我发现自己编写的处理程序不会使用任何事件信息。所以我经常编写以下形式的处理程序:

def handler(_):
    #react

为了放弃这个论点。

但是我希望我不必这样做,因为有时候我想重用处理程序作为不带参数的通用动作函数,有时我会使用现有的零参数函数作为处理程序。

我目前的解决方案是使用lambda包装函数:

def handler():
    #react

event.addHandler(lambda _:handler())

但由于其他原因,这似乎是错误的。

我对lambda的直观理解是它首先是对返回值的描述,而事件处理程序不返回任何内容。我觉得lambdas是用来表达纯粹的功能,在这里我只使用它们来引起副作用。

另一个解决方案是一般的装饰者丢弃所有论据。

def discardArgs(func):
    def f(*args):
        return func()
    return f

但是我需要在很多地方使用它,并且为了这么简单的事情,将这样的实用程序导入每个脚本似乎很愚蠢。

是否有一种特殊的标准或“pythonic”方式来包装函数以丢弃所有参数?

1 个答案:

答案 0 :(得分:1)

Use *args

def handler(*args):
    #react

然后handler可以使用0个参数或任意数量的位置参数。