In Python, the lambda
keyword is used to define an anonymous (i.e., nameless) function, using the following syntax:
lambda parameters: expression
Assume we have the following list of fruits:
fruits = ['apple', 'orange', 'grape', 'lemon', 'mango', 'banana']
Now imagine we need to filter our list to print only fruit names which are 5 characters long. We could do so by defining a named function to test word lengths, and then passing it (and our list of fruits) to filter()
:
def five_letter_words(word):
if len(word) == 5:
return True
five_letter_fruits = filter(five_letter_words, fruits)
for fruit in five_letter_fruits:
print(fruit)
apple
grape
lemon
mango
>>>
Or, the same task can be accomplished directly in filter()
using a lambda
expression, without needing to define a separate named function:
five_letter_fruits = filter(lambda word: len(word) == 5, fruits)
for fruit in five_letter_fruits:
print(fruit)
apple
grape
lemon
mango
>>>
Because lambda functions are Python expressions, they can be assigned to variables.
So, this:
add_two = lambda x, y: x+y
add_two(3, 5)
Is equivalent to this:
def add_two(x, y):
return x + y
add_two(3, 5)
Was this helpful? Did I save you some time?
Top comments (1)
I learned the lesson of not binding arguments in dynamically created lambdas. I find creating lambdas inside of loops/list comprehension so useful, but it is easy to end up with a list of lamdas that all return the final result.
TIL: Bind arguments to dynamically generated lambdas in python
Waylon Walker ・ Apr 27 ・ 2 min read