传递空/无操作函数/闭包作为默认参数

11 投票
3 回答
8854 浏览
提问于 2025-04-17 10:00

这是我的代码:

def execute(f, *args):
    f(args)

有时候我想在调用 execute 的时候不传递任何函数 f,所以我希望 f 默认是一个空函数,也就是什么都不做的函数。

3 个回答

8

一个返回None的匿名函数通常是一个合适的“无操作”函数:

def execute(func=lambda *a, **k: None, *args, **kwargs):
    return func(*args, **kwargs)
13

问题是,有时候我想在执行时不传任何参数,所以我希望这个函数默认使用一个空函数。

对我来说,这样做没问题:

>>> def execute(function = lambda x: x, *args):
...   print function, args
...   function(args)
...
>>> execute()
<function <lambda> at 0x01DD1A30> ()
>>>

我注意到你的例子在实现中试图使用 f,而你把参数叫做 function。这真的可以这么简单吗? ;)

不过,你需要明白,Python 只能在你完全不传参数的情况下知道你想跳过默认参数,所以像 execute(0) 这样的调用是行不通的,因为它会把 0 当作一个函数来处理。

4

我不是很明白你想要做什么
不过这样做可以帮到你吗?

def execute(func=None, *args, **kwargs):
    if func:
        func(*args, **kwargs)

你还可以加一个else语句,来做你想做的任何事情。

撰写回答