python中合适的“do nothing”lambda表达式?

2024-04-23 19:14:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有时发现自己想让占位符“不做任何事”lambda表达式,类似于说:

def do_nothing(*args):
    pass

但是以下语法是非法的,因为lambda表达式试图返回冒号后面的内容,而您不能返回pass

do_nothing = lambda *args: pass

所以我想知道,下面的表达式是否适合替代上面的表达式?

do_nothing = lambda *args: None

由于上面的do_nothing函数在技术上返回None,所以可以生成返回None的lambda表达式作为占位符lambda表达式吗?或者是不好的做法?


Tags: lambda函数none内容表达式def语法args
3条回答

如果你真的想要一个完整的什么都不做的函数,请确保使用*args*kwargs

noop = lambda *args, **kwargs: None

在所有光荣的行动中

>>> noop = lambda *args, **kwargs: None
>>> noop("yes", duck_size="horse", num_ducks=100)
>>>

旁注

帮自己一个忙,包括**kwargs处理。如果你试图在代码的某个地方使用它,却忘了它不会占用kwargs,那么什么都不做是一个例外:

In [2]: do_nothing('asdf', duck="yes")
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-efbd722f297c> in <module>()
----> 1 do_nothing('asdf', duck="yes")

TypeError: <lambda>() got an unexpected keyword argument 'duck'

这:

def do_nothing(*args):
    pass

相当于:

lambda *args: None

一个是lambda,一个不是(例如,__name__在函数上是do_nothing,在lambda上是<lambda>)。如果这对你很重要,不要忘记**kwargs。Python中没有显式return <x>返回None的函数。这是here

A call always returns some value, possibly None, unless it raises an exception.

我使用了类似的函数作为默认值,例如:

def long_running_code(progress_function=lambda percent_complete: None):
    # Report progress via progress_function.

有时lambda函数用于数据转换,在这种情况下,“不做任何事”意味着返回输入,即

lambda x: x

如果你不能回信

lambda x: None

相关问题 更多 >