I sometimes find myself wanting to make placeholder \'do nothing\' lambda expressions, similar to saying:
def do_nothing(*args):
pass
B
This:
def do_nothing(*args):
pass
is equivalent to:
lambda *args: None
With some minor differences in that one is a lambda
and one isn't. (For example, __name__
will be do_nothing
on the function, and <lambda>
on the lambda.) Don't forget about **kwargs
, if it matters to you. Functions in Python without an explicit return <x>
return None
. This is here:
A call always returns some value, possibly None, unless it raises an exception.
I've used similar functions as default values, say for example:
def long_running_code(progress_function=lambda percent_complete: None):
# Report progress via progress_function.
This is the simplest lambda expression:
do_nothing = lambda: None
No arguments required and the minimal required return.
If you truly want a full do nothing function, make sure to take *args
and *kwargs
.
noop = lambda *args, **kwargs: None
In all its glorious action
>>> noop = lambda *args, **kwargs: None
>>> noop("yes", duck_size="horse", num_ducks=100)
>>>
Do yourself a favor for the future and include the **kwargs
handling. If you ever try to use it somewhere deep away in your code and you forgot that it doesn't take kwargs
, it will be quite the Exception to doing nothing:
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'
Sometimes lambda functions are used for data transformation, and in that case 'do nothing' means to return the input, i.e.
lambda x: x
To return none you can write
lambda x: None
In Python 3 you don't even need to define any functions for that. Calling type(None)
will return you the NoneType
constructor, which you can use for doing nothing: type(None)()
. Keep in mind that the NoneType
constructor only takes 0 arguments.
In Python 2, though, creating instances of NoneType
is impossible, so lambda: None
would make the most sense.