![]() |
In Python, code cleanliness is fundamental. We often find ourselves writing small functions that serve a specific purpose at only one single point in the program. Defining these functions using the classic def syntax can unnecessarily bloat your code.
This is exactly where Lambda Functions come into play.
The Problem: "One-Shot" Functions
Imagine we have a list of tuples representing products and their prices. We want to sort this list based on the price (the second element of the tuple).
Normally, we would use the sort() method by passing a function to the key parameter. Here is how it would look using the classic approach:
# List of products: (Name, Price)
products = [("Laptop", 1200), ("Mouse", 25), ("Keyboard", 80), ("Monitor", 300)]
# We define a specific function to extract the price
def extract_price(product):
return product[1]
# We use the function defined above to sort
products.sort(key=extract_price)
print(products)
Why is this inefficient? The extract_price function takes up space in your code, requires a name, and will remain defined in your namespace even if you never use it again in the entire program. It is a typical one-shot function.
The Solution: Lambda Functions
Lambda functions are anonymous functions (nameless) defined on a single line. They are perfect for quick tasks like the one in the previous example.
The Syntax
The structure of a lambda is very simple:
lambda arguments: expression
The Previous Example, Rewritten
Let's see how the same sorting algorithm becomes much sleeker:
products = [("Laptop", 1200), ("Mouse", 25), ("Keyboard", 80), ("Monitor", 300)]
# Sorting using a lambda function on the fly
products.sort(key=lambda p: p[1])
print(products)
In a single line, we have eliminated the need for an external function. The code is more readable because the "price extraction" logic is declared exactly where it is used.
Another example: Filtering a Data List
Another typical case where "one-shot" functions are created is when we need to filter a list based on a specific condition.
Imagine having a database (in the form of a list of dictionaries) containing application users. We want to quickly retrieve only the users who are over 18 years old.
The "Bulky" Approach (with def)
users = [
{"name": "Alice", "age": 25},
{"name": "Bob", "age": 15},
{"name": "Charlie", "age": 30},
{"name": "Diana", "age": 17}
]
# Function created only to be used once in the filter
def is_adult(user):
return user["age"] >= 18
# Applying the filter
adults = list(filter(is_adult, users))
The "Pythonic" Approach (with Lambda)
# All in one line: immediate and readable filtering
adults = list(filter(lambda u: u["age"] >= 18, users))
print(adults)
Why do lambdas matter?
- Spatial Readability: The condition is written exactly where it is needed.
- Naming Economy: You didn't have to invent a name for such simple logic.
- Flexibility: You can change the logic on the fly without having to modify external definitions (but this approach should be shared in case of teamwork).
When to Use (and Not Use) Lambdas
Lambdas are powerful tools, but they should be used wisely.
| Feature | Standard Function (def) | Lambda Function |
|---|---|---|
| Name | Required | Anonymous |
| Lines | Multiple | Single |
| Return | Explicit with return | Implicit |
| Reusability | Easy | Hard (intended for immediate use) |
Conclusion
Lambda functions do not replace traditional functions, but they are the "Swiss Army knife" for keeping your Python code lean and Pythonic. The next time you are about to write a function you will only use once, ask yourself: "Can I write this as a lambda?"
Follow me #techelopment
Official site: www.techelopment.it
facebook: Techelopment
instagram: @techelopment
X: techelopment
Bluesky: @techelopment
telegram: @techelopment_channel
whatsapp: Techelopment
youtube: @techelopment
