我有时会发现自己想要占位符'什么也不做'lambda表达式,类似于说:
def do_nothing(*args):
pass
Run Code Online (Sandbox Code Playgroud)
但是以下语法是非法的,因为lambda表达式尝试返回冒号后面的内容,并且您无法返回pass.
do_nothing = lambda *args: pass
Run Code Online (Sandbox Code Playgroud)
所以我想知道,以下表达式是否适合替代上述?
do_nothing = lambda *args: None
Run Code Online (Sandbox Code Playgroud)
由于do_nothing上面的函数在技术上返回None,是否可以创建一个返回None用作占位符lambda表达式的lambda表达式?还是不好的做法?
Tha*_*tos 73
这个:
def do_nothing(*args):
pass
Run Code Online (Sandbox Code Playgroud)
相当于:
lambda *args: None
Run Code Online (Sandbox Code Playgroud)
有一些细微差别,一个是一个lambda,一个不是.(例如,__name__将do_nothing在函数上,<lambda>在lambda上.)不要忘记**kwargs,如果它对你很重要.没有显式return <x>返回的Python函数None.这是在这里:
调用总是返回一些值,可能是None,除非它引发异常.
我使用了类似的函数作为默认值,例如:
def long_running_code(progress_function=lambda percent_complete: None):
# Report progress via progress_function.
Run Code Online (Sandbox Code Playgroud)
Kyl*_*ley 30
如果你真的想要一个完整的无所事事的功能,请务必采取*args 和 *kwargs.
noop = lambda *args, **kwargs: None
Run Code Online (Sandbox Code Playgroud)
在其所有光荣的行动中
>>> noop = lambda *args, **kwargs: None
>>> noop("yes", duck_size="horse", num_ducks=100)
>>>
Run Code Online (Sandbox Code Playgroud)
帮助自己谋求未来,包括**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'
Run Code Online (Sandbox Code Playgroud)
Pau*_*aul 11
有时lambda函数用于数据转换,在这种情况下,"什么都不做"意味着返回输入,即
lambda x: x
要返回任何一个,你可以写
lambda x: None
这是最简单的lambda表达式:
do_nothing = lambda: None
Run Code Online (Sandbox Code Playgroud)
不需要参数和最低要求的回报.
在Python 3中,您甚至不需要为此定义任何函数。调用type(None)将返回NoneType构造函数,您可以使用它来执行任何操作:type(None)()。请记住,NoneType构造函数仅接受 0 个参数。
但在Python 2中,创建 的实例NoneType是不可能的,因此lambda: None最有意义。