DEV Community

Cover image for How to Use Lambda Functions in Python
Federico Trotta for AppSignal

Posted on • Originally published at blog.appsignal.com

How to Use Lambda Functions in Python

Lambda functions in Python are a powerful way to create small, anonymous functions on the fly. These functions are typically used for short, simple operations where the overhead of a full function definition would be unnecessary.

While traditional functions are defined using the def keyword, Lambda functions are defined using the lambda keyword and are directly integrated into lines of code. In particular, they are often used as arguments for built-in functions. They enable developers to write clean and readable code by eliminating the need for temporary function definitions.

In this article, we'll cover what Lambda functions do and their syntax. We'll also provide some examples and best practices for using them, and discuss their pros and cons.

Prerequisites

Lambda functions have been a part of Python since version 2.0, so you'll need:

  • Minimum Python version: 2.0.
  • Recommended Python version: 3.10 or later.

In this tutorial, we'll see how to use Lambda functions with the library Pandas: a fast, powerful, flexible, and easy-to-use open-source data analysis and manipulation library. If you don't have it installed, run the following:

pip install pandas
Enter fullscreen mode Exit fullscreen mode

Syntax and Basics of Lambda Functions for Python

First, let's define the syntax developers must use to create Lambda functions.

A Lambda function is defined using the lambda keyword, followed by one or more arguments and an expression:

lambda arguments: expression
Enter fullscreen mode Exit fullscreen mode

Let's imagine we want to create a Lambda function that adds up two numbers:

add = lambda x, y: x + y
Enter fullscreen mode Exit fullscreen mode

Run the following:

result = add(3, 5)
print(result)
Enter fullscreen mode Exit fullscreen mode

This results in:

8
Enter fullscreen mode Exit fullscreen mode

We've created an anonymous function that takes two arguments, x and y. Unlike traditional functions, Lambda functions don't have a name: that's why we say they are "anonymous."

Also, we don't use the return statement, as we do in regular Python functions. So we can use the Lambda function at will: it can be printed (as we did in this case), stored in a variable, etc.

Now let's see some common use cases for Lambda functions.

Common Use Cases for Lambda Functions

Lambda functions are particularly used in situations where we need a temporarily simple function. In particular, they are commonly used as arguments for higher-order functions.

Let's see some practical examples.

Using Lambda Functions with the map() Function

map() is a built-in function that applies a given function to each item of an iterable and returns a map object with the results.

For example, let's say we want to calculate the square roots of each number in a list. We could use a Lambda function like so:

# Define the list of numbers
numbers = [1, 2, 3, 4]

# Calculate square values and print results
squared = list(map(lambda x: x ** 2, numbers))
print(squared)
Enter fullscreen mode Exit fullscreen mode

This results in:

[1, 4, 9, 16]
Enter fullscreen mode Exit fullscreen mode

We now have a list containing the square roots of the initial numbers.

As we can see, this greatly simplifies processes to use functions on the fly that don't need to be reused later.

Using Lambda Functions with the filter() Function

Now, suppose we have a list of numbers and want to filter even numbers.

We can use a Lambda function as follows:

# Create a list of numbers
numbers = [1, 2, 3, 4]

# Filter for even numbers and print results
even = list(filter(lambda x: x % 2 == 0, numbers))
print(even)
Enter fullscreen mode Exit fullscreen mode

This results in:

[2,4]
Enter fullscreen mode Exit fullscreen mode

Using Lambda Functions with the sorted() Function

The sorted() function in Python returns a new sorted list from the elements of any iterable. Using Lambda functions, we can apply specific filtering criteria to these lists.

For example, suppose we have a list of points in two dimensions: (x,y). We want to create a list that orders the y values incrementally.

We can do it like so:

# Creates a list of points
points = [(1, 2), (3, 1), (5, -1)]

# Sort the points and print
points_sorted = sorted(points, key=lambda point: point[1])
print(points_sorted)
Enter fullscreen mode Exit fullscreen mode

And we get:

[(5, -1), (3, 1), (1, 2)]
Enter fullscreen mode Exit fullscreen mode

Using Lambda Functions in List Comprehensions

Given their conciseness, Lambda functions can be embedded in list comprehensions for on-the-fly computations.

Suppose we have a list of numbers. We want to:

  • Iterate over the whole list
  • Calculate and print double the initial values.

Here's how we can do that:

# Create a list of numbers
numbers = [1, 2, 3, 4]

# Calculate and print the double of each one
squared = [(lambda x: x ** 2)(x) for x in numbers]
print(squared)
Enter fullscreen mode Exit fullscreen mode

And we obtain:

[1, 4, 9, 16]
Enter fullscreen mode Exit fullscreen mode

Advantages of Using Lambda Functions

Given the examples we've explored, let's run through some advantages of using Lambda functions:

  • Conciseness and readability where the logic is simple: Lambda functions allow for concise code, reducing the need for standard function definitions. This improves readability in cases where function logic is simple.
  • Enhanced functional programming capabilities: Lambda functions align well with functional programming principles, enabling functional constructs in Python code. In particular, they facilitate the use of higher-order functions and the application of functions as first-class objects.
  • When and why to prefer Lambda functions: Lambda functions are particularly advantageous when defining short, "throwaway" functions that don't need to be reused elsewhere in code. So they are ideal for inline use, such as arguments to higher-order functions.

Limitations and Drawbacks

Let's briefly discuss some limitations and drawbacks of Lambda functions in Python:

  • Readability challenges in complex expressions: While Lambda functions are concise, they can become difficult to read and understand when used for complex expressions. This can lead to code that is harder to maintain and debug.
  • Limitations in error handling and debugging: As Lambda functions can only contain a single expression, they can't include statements, like the try-except block for error handling. This limitation makes them unsuitable for complex operations that require these features.
  • Restricted functionality: Since Lambda functions can only contain a single expression, they are less versatile than standard functions. This by-design restriction limits their use to simple operations and transformations.

Best Practices for Using Lambda Functions

Now that we've considered some pros and cons, let's define some best practices for using Lambda functions effectively:

  • Keep them simple: To maintain readability and simplicity, Lambda functions should be kept short and limited to straightforward operations. Functions with complex logic should be refactored into standard functions.
  • Avoid overuse: While Lambda functions are convenient for numerous situations, overusing them can lead to code that is difficult to read and maintain. Use them judiciously and opt for standard functions when clarity is fundamental.
  • Combine Lambda functions with other Python features: As we've seen, Lambda functions can be effectively combined with other Python features, such as list comprehensions and higher-order functions. This can result in more expressive and concise code when used appropriately.

Advanced Techniques with Lambda Functions

In certain cases, more advanced Lambda function techniques can be of help.

Let's see some examples.

Nested Lambda Functions

Lambda functions can be nested for complex operations.

This technique is useful in scenarios where you need to have multiple small transformations in a sequence.

For example, suppose you want to create a function that calculates the square root of a number and then adds 1. Here's how you can use Lambda functions to do so:

# Create a nested lambda function
nested_lambda = lambda x: (lambda y: y ** 2)(x) + 1

# Print the result for the value 3
print(nested_lambda(3))
Enter fullscreen mode Exit fullscreen mode

You get:

10
Enter fullscreen mode Exit fullscreen mode

Integration with Python Libraries for Advanced Functionality

Many Python libraries leverage Lambda functions to simplify complex data processing tasks.

For example, Lambda functions can be used with Pandas and NumPy to simplify data manipulation and transformation.

Suppose we have a data frame with two columns. We want to create another column that is the sum of the other two. In this case, we can use Lambda functions as follows:

# Create the columns' data
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}

# Create data frame
df = pd.DataFrame(data)

# Create row C as A+B and print the dataframe
df['C'] = df.apply(lambda row: row['A'] + row['B'], axis=1)
print(df)
Enter fullscreen mode Exit fullscreen mode

And we get:

   A  B  C
0  1  4  5
1  2  5  7
2  3  6  9
Enter fullscreen mode Exit fullscreen mode

That's it for our whistle-stop tour of Lambda functions in Python!

Wrapping Up

In this article, we've seen how to use Lambda functions in Python, explored their pros and cons, some best practices, and touched on a couple of advanced use cases.

Happy coding!

P.S. If you'd like to read Python posts as soon as they get off the press, subscribe to our Python Wizardry newsletter and never miss a single post!

Top comments (1)

Collapse
 
akipham15 profile image
akipham15

@pbailey awefwefwef