An anonymous function is simply a function definition without an identifier. They exist in order to encapsulate simple logic into a syntactically lightweight form. In Python, anonymous functions are defined using the lambda
keyword and have the following syntax:
lambda arguments: expression
The executable body of the lambda must be an expression not a statement. The value returned by the lambda is the value of the contained expression.
I typically use lambda functions to perform a lightweight manipulation of data structures or when passing the lambda to a higher-order function such as filter()
, map()
, or sort()
.
Here is a simple example. Say I want to remove a key matching a specific criteria from a list of maps.
my_list = [
{'a': 1, 'b': 2, 'c': 3},
{'b': 4, 'c': 5, 'a': 6},
{'c': 7, 'a': 8, 'b': 9}
]
A trivial solution would be to iterate through the list and remove the specified key:
my_list = [
{'a': 1, 'b': 2, 'c': 3},
{'b': 4, 'c': 5, 'a': 6},
{'c': 7, 'a': 8, 'b': 9}
]
key_to_remove = 'a'
for m in my_list:
for k in m.keys():
if k == key_to_remove:
m.pop(k, None)
The more elegant solution is to use a lambda function:
my_list = [
{'a': 1, 'b': 2, 'c': 3},
{'b': 4, 'c': 5, 'a': 6},
{'c': 7, 'a': 8, 'b': 9}
]
key_to_remove = 'a'
map(lambda x: [x.pop(k) for k in x.keys() if k in key_to_remove],
my_list or [{}])
In both cases the result is the same:
>>> print my_list
[{'c': 3, 'b': 2}, {'c': 5, 'b': 4}, {'c': 7, 'b': 9}]
Lambda functions have broader utility for filter()
and sort()
where the function is applied to each item in the iterable, allowing for polymorphic filtering or sorting.