2012-01-11 63 views
7

这是我的代码:通空/空操作,功能/λ为默认参数

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

我有时想无功能传递到fexecute,所以我想f默认为空函数。

+1

错误消息是什么?为什么你的参数名为'function',但你叫'f'? – 2012-01-11 11:08:46

+3

你可能得到错误信息'全局名'f'没有定义,因为没有定义'f'。如果您收到了不同的错误信息,请指定哪一个(请完整回溯)。 – 2012-01-11 11:09:42

回答

6

我不太明白你在做什么
但是会有这样的东西适合你吗?

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

您还可以添加一个else语句来做任何你喜欢的事情。

+1

是的,那是有效的。我试图摆脱这个“if”陈述。 – Randomblue 2012-01-11 11:22:27

+0

在这个如果func是def func():pass。你不需要if。只是功能(*参数,** kwargs) – 2014-05-21 12:26:22

10

问题是有时候想传递没有参数来执行,所以我想把函数默认为空函数。

正常工作:

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

我注意到你的榜样试图执行中使用f,而你所谓的参数function。难道真的那么简单吗? ;)

这就是说,你要明白,Python会没有办法告诉你想跳过默认的参数,除非有根本没有参数,所以,因为它试图把0作为函数execute(0)不能工作。

+0

对不起,这个问题非常措辞。我已经重写了它。 – Randomblue 2012-01-11 11:31:42

+6

为了使它更通用,使它成为'lambda * x,** xx:None'。现在它实际上是一个通用的no-op函数 - 它接受任意数量的参数和关键字参数。 – 2012-01-11 11:56:12

6

匿名函数返回无往往是一个合适的无操作:

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

我想这意味着没有任何简短的符号'lambda * a,** k:None'。我尝试了'func = pass',但当然这并不奏效。 – kasperd 2015-01-02 00:51:18