python中一个合适的'do nothing'lambda表达式?

时间:2014-03-29 23:46:11

标签: python lambda

我有时会发现自己想让占位符“无所事事”的lambda表达式,类似于说:

def do_nothing(*args):
    pass

但是以下语法是非法的,因为lambda表达式尝试返回冒号后面的内容,并且您无法返回pass

do_nothing = lambda *args: pass

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

do_nothing = lambda *args: None

由于上面的do_nothing函数在技术上返回None,是否可以创建一个返回None的lambda表达式作为占位符lambda表达式?或者这是不好的做法?

5 个答案:

答案 0 :(得分:63)

此:

def do_nothing(*args):
    pass

相当于:

lambda *args: None

有一些细微的差别,一个是lambda,一个不是。 (例如,__name__将在函数上为do_nothing,在lambda上为<lambda>。)如果对您而言,请不要忘记**kwargsreturn <x>。 Python中的函数没有明确的None返回def long_running_code(progress_function=lambda percent_complete: None): # Report progress via progress_function. 。这是here

  

一个调用总是返回一些值,可能是None,除非它引发异常。

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

{{1}}

答案 1 :(得分:27)

如果你真的想要一个完整无效的功能,请务必采取*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'

答案 2 :(得分:9)

有时lambda函数用于数据转换,在这种情况下“什么也不做”&#39;表示返回输入,即

lambda x: x

要返回无,您可以写

lambda x: None

答案 3 :(得分:5)

这是最简单的lambda表达式:

const { spawn } = require('child_process');
const ls = spawn('proxy');//@see https://nodejs.org/api/child_process.html#child_process_class_childprocess

ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
  console.log(`stderr: ${data}. We should stop the child_process`);
  ls.kill('SIGTSTP');
});

ls.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});

不需要参数和最低要求回报。

答案 4 :(得分:-1)

Python 3 中,您甚至不需要为此定义任何函数。调用type(None)将返回NoneType构造函数,您可以使用该构造函数执行以下操作:type(None)()。请记住,NoneType构造函数仅接受0个参数。

但是在 Python 2 中,创建NoneType的实例是不可能的,因此lambda: None才是最有意义的。