Search code examples
pythonlambda

A suitable 'do nothing' lambda expression in python?


I sometimes find myself wanting to make placeholder 'do nothing' lambda expressions, similar to saying:

def do_nothing(*args):
    pass

But the following syntax is illegal since lambda expressions attempt to return whatever is after the colon, and you can't return pass.

do_nothing = lambda *args: pass

So I was wondering, would the following expression be a suitable replacement for the above?

do_nothing = lambda *args: None

Since the do_nothing function above technically returns None, is it okay to make a lambda expression that returns None to use as a placeholder lambda expression? Or is it bad practice?


Solution

  • 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.