Lambda Functions in Python

A lambda function is a small anonymous function that can take any number of arguments but contains only one expression.

Translated from programmer language to human language:

  • Anonymous — it has no name (unlike regular functions defined with def)
  • Small — it's limited to one expression (one line of code)
  • Function — it takes arguments and returns a result

Lambda function syntax

Python 3.13
lambda arguments: expression

Where:

  • lambda — is the keyword that tells Python we're creating a lambda function
  • arguments — are the input parameters (can be from 0 to several, separated by commas)
  • expression — is a single expression, the result of which will be returned

Comparison with regular functions

Let's compare a regular function and a lambda function that do the same thing:

Python 3.13
# Regular function
>>> def square(x):
...     return x * x

# Equivalent lambda function
>>> square_lambda = lambda x: x * x

# Using both functions
>>> print(square(5))
25
>>> print(square_lambda(5))
25
# Function with multiple arguments >>> def power(base, exponent): ... return base ** exponent # Equivalent lambda function >>> power_lambda = lambda base, exponent: base ** exponent >>> print(power(2, 3))
8
>>> print(power_lambda(2, 3))
8

As you can see, lambda functions are more compact but less readable for complex operations.

When to use lambda functions?

Lambda functions are best suited for cases where:

  1. The function is simple (one expression)
  2. The function is used only once (or a few times in one place)
  3. The function is passed as an argument to another function

The most common use cases are with higher-order functions such as map(), filter(), sorted(), etc.

Lambda with higher-order functions

map() — applying a function to each element

The map() function applies the specified function to each element of an iterable object:

Python 3.13
# Doubling all numbers in a list
>>> numbers = [1, 2, 3, 4, 5]

# With a regular function
>>> def double(x):
...     return x * 2

>>> doubled = list(map(double, numbers))
>>> print(doubled)
[2, 4, 6, 8, 10]
# With a lambda function (much more compact!) >>> doubled_lambda = list(map(lambda x: x * 2, numbers)) >>> print(doubled_lambda)
[2, 4, 6, 8, 10]
# Converting temperature from Celsius to Fahrenheit >>> celsius = [0, 10, 20, 30, 40] >>> fahrenheit = list(map(lambda c: (c * 9/5) + 32, celsius)) >>> print(fahrenheit)
[32.0, 50.0, 68.0, 86.0, 104.0]

filter() — selecting elements by condition

The filter() function creates an iterator from elements for which the function returns True:

Python 3.13
# Filtering even numbers
>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# With a lambda function
>>> even_lambda = list(filter(lambda x: x % 2 == 0, numbers))
>>> print(even_lambda)
[2, 4, 6, 8, 10]
# Filtering words longer than 3 letters >>> words = ["hi", "hello", "hey", "howdy", "hi there"] >>> long_words = list(filter(lambda word: len(word) > 3, words)) >>> print(long_words)
['hello', 'howdy', 'hi there']

sorted() — sorting with a custom key

The sorted() function returns a sorted list, and with the key parameter you can specify a function to extract the value for comparison:

Python 3.13
# Sorting numbers by absolute value
>>> numbers = [5, -3, 2, -8, 1, 0, -2]

>>> sorted_numbers = sorted(numbers, key=lambda x: abs(x))
>>> print(sorted_numbers)
[0, 1, 2, -2, -3, 5, -8]
# Sorting dictionaries by the value of a specific key >>> students = [ ... {"name": "Alice", "grade": 85}, ... {"name": "Bob", "grade": 92}, ... {"name": "Charlie", "grade": 78}, ... {"name": "Diana", "grade": 95} ... ] # Sorting by grade (descending) >>> sorted_by_grade = sorted(students, key=lambda student: student["grade"], reverse=True) >>> for student in sorted_by_grade: ... print(f"{student['name']}: {student['grade']}")
Diana: 95
Bob: 92
Alice: 85
Charlie: 78

reduce() — sequential application of a function

The reduce() function (from the functools module) sequentially applies a function to elements, accumulating the result:

Python 3.13
>>> from functools import reduce

# Sum of all numbers in a list
>>> numbers = [1, 2, 3, 4, 5]

>>> total_lambda = reduce(lambda x, y: x + y, numbers)
>>> print(total_lambda)
15
# Joining strings >>> words = ["Hello", "world", "of", "Python"] >>> sentence = reduce(lambda x, y: x + " " + y, words) >>> print(sentence)
Hello world of Python

Passing lambda functions to other functions

Lambda functions are often used as arguments in other functions:

Python 3.13
>>> def apply_operation(x, y, operation):
...     """Applies an operation to two numbers and returns the result"""
...     return operation(x, y)

# Using with different lambda functions
>>> print(apply_operation(5, 3, lambda x, y: x + y))  # Addition
8
>>> print(apply_operation(5, 3, lambda x, y: x * y)) # Multiplication
15
# Formatting data >>> def format_data(data, formatter): ... """Formats data using the specified function""" ... return [formatter(item) for item in data] >>> names = ["alice", "bob", "charlie"] >>> print(format_data(names, lambda x: x.title())) # Capitalize first letter
['Alice', 'Bob', 'Charlie']

Limitations of lambda functions

Lambda functions have several important limitations:

  1. Only one expression — you cannot use multiple lines of code
  2. No documentation — you cannot add a docstring
  3. Limited readability — regular functions are better for complex operations
  4. No assignment operator — you cannot use = in a lambda
Python 3.13
# Example of complex logic where it's better not to use lambda
>>> complex_lambda = lambda x: (
...     x ** 2 if x > 0
...     else x + 1 if x < 0
...     else 42
... )
... print(complex_lambda(5))
25
# The same thing but with a regular function - much clearer >>> def process_number(x): ... """Processes a number according to rules: ... - Positive -> square ... - Negative -> x + 1 ... - Zero -> 42 ... """ ... if x > 0: ... return x ** 2 ... elif x < 0: ... return x + 1 ... else: ... return 42 >>> print(process_number(5)) 25

Understanding check

Which of the following statements about lambda functions in Python is true?


We are in touch with you
English