【问题标题】:Python wrapper function discarding argumentsPython包装函数丢弃参数
【发布时间】:2014-11-29 15:34:18
【问题描述】:

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

但更多时候,我发现自己编写的处理程序不使用任何事件信息。所以我不断编写表单的处理程序:

def handler(_):
    #react

为了舍弃论据。

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

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

def handler():
    #react

event.addHandler(lambda _:handler())

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

我对 lambda 的直观理解是,它首先是对返回值的描述,而事件处理程序什么也不返回。我觉得 lambdas 是用来表达纯函数的,在这里我使用它们只是为了产生副作用。

另一种解决方案是通用装饰器丢弃所有参数。

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

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

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

【问题讨论】:

  • lambda 在 Python 中没有这个含义。它的主要目的是创建可以作为参数传递的匿名可调用对象,而无需使用def 语句绑定更永久的名称。
  • @chepner 如果这是他们的目的,那么他们做得不好。你不能用一个或多个语句来定义它们,只能用一个表达式。这就是让我觉得它们主要是表达式的可调用包装器。

标签: python function arguments


【解决方案1】:

Use *args:

def handler(*args):
    #react

那么handler可以接受0个参数,或者任意数量的位置参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 1970-01-01
    • 2021-02-24
    相关资源
    最近更新 更多