传递空/无操作函数/闭包作为默认参数
这是我的代码:
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语句,来做你想做的任何事情。