57

A Python newbie question, why is this syntax invalid: lambda: pass, while this: def f(): pass is correct?

Thanks for your insight.

4 Answers 4

59

lambdas can only contain expressions - basically, something that can appear on the right-hand side of an assignment statement. pass is not an expression - it doesn't evaluate to a value, and a = pass is never legal.

Another way of thinking about it is, because lambdas implicitly return the result of their body, lambda: pass is actually equivalent to:

def f():
    return pass

Which doesn't make sense. If you really do need a no-op lambda for some reason, do lambda: None instead.

Sign up to request clarification or add additional context in comments.

2 Comments

That makes sense, thanks! But then, since lambda: None still returns a value, is there any way I can define an anonymous function that behaves exactly like def f(): pass?
@Rez it is actually the same - all Python functions return a value; if they fall off the end, or reach a bare return, they return None.
49

That is an error because after the colon you have to put the return value, so:

lambda: pass

is equal to:

def f():
   return pass

that indeed makes no sense and produces a SyntaxError as well.

Comments

33

The return value of a function without a return statement is None. You can see this from the simple pass function that is defined in the OP:

>>> def f():
...     pass
... 
>>> print f()
None

If you are looking for a lambda function that is equivalent to this "no-op" function, then you can use:

lambda: None

For example:

>>> f = lambda: None
>>> print f()
None

Comments

-1

If you want to use a lambda you could rely on the Ellipsis literal ....

Your lambda would become lambda: ....

The Ellipsis literal is often used instead of pass.

1 Comment

I was curious why this got downvoted and it looks like ... refers to an instance of an actual ellipsis type :o

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.