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.