Python 将空/noop函数/lambda作为默认参数传递
这是我的代码:Python 将空/noop函数/lambda作为默认参数传递,python,Python,这是我的代码: def execute(f, *args): f(args) 有时我不想将函数f传递给execute,因此我希望f默认为空函数 问题是,有时我不想传递任何要执行的参数,所以我希望函数默认为空函数 对我来说很好: >>> def execute(function = lambda x: x, *args): ... print function, args ... function(args) ... >>> execute()
def execute(f, *args):
f(args)
有时我不想将函数f
传递给execute
,因此我希望f
默认为空函数
问题是,有时我不想传递任何要执行的参数,所以我希望函数默认为空函数
对我来说很好:
>>> def execute(function = lambda x: x, *args):
... print function, args
... function(args)
...
>>> execute()
<function <lambda> at 0x01DD1A30> ()
>>>
def execute(函数=lambda x:x,*args):
... 打印函数,args
... 函数(args)
...
>>>执行()
()
>>>
我注意到您的示例试图在实现中使用f
,而您调用了参数函数
。真的会这么简单吗?;)
也就是说,您需要了解,Python无法告诉您要跳过默认参数,除非根本没有参数,因此
execute(0)
无法工作,因为它试图将0
视为一个函数。我不太明白您想做什么但是你喜欢这个工作吗
def execute(func=None, *args, **kwargs):
if func:
func(*args, **kwargs)
您还可以添加else语句来执行任何您喜欢的操作。返回None的匿名函数通常是一个合适的no-op:
def execute(func=lambda *a, **k: None, *args, **kwargs):
return func(*args, **kwargs)
什么错误消息?为什么您的参数名为
函数
,但您调用了f
?您可能会收到错误消息全局名称“f”未定义
,因为没有定义f
。如果您收到不同的错误消息,请指定哪一条(请完全回溯)。是的,这很有效。我试图摆脱这个if
语句。你不需要if。只是func(*args,**kwargs)对不起,这个问题措辞很糟糕。我已经重写了它。为了使它更通用,请将它设置为lambda*x,**xx:None
。现在它实际上是一个通用的无运算函数——它接受任意数量的参数和关键字参数。我想这意味着lambda*a,**k:None
没有任何更短的符号。我尝试了func=pass
,但当然没用。