A mysterious engineer once told me to sort a massive amount of data. When I
asked for the sorting function, I was told a function has no name. Is this
possible? Doesn't every function need a name? The answer is no. There are
functions that have no name at all. These nameless functions are known as
anonymous functions or lambda expressions. Today, we will learn how to
write and used lambda expressions in Python.
Get ready for some pithy anonymity.
Suppose you want to write a function that will compute the value of 3x plus 1.
The standard approach would be to define a function. Let's call it f with a single
input X. Next, you would return the value 3x plus 1. If you input 2, you get the
value 7, so it works nicely. Let us now do this using anonymous
functions. Before we get started, a quick note. Throughout this video we will use
the terms "anonymous functions" and "lambda expressions" interchangeably. They both
mean the same thing. To create a lambda expression, you type the keyword lambda,
followed by your inputs. Next, type a colon. Finally, enter an expression that
will be the return value. This anonymous function will take the input X and
return 3x plus 1, just like the earlier function f. There is a problem, however. We
cannot use this function because it does not have a name. It is, after all
anonymous. lambda is not the name of the function.
It is a Python keyword that says what follows is an anonymous function. So how
do you use it? One way is to give it a name. Let us call this lambda expression
G. Now, you can use this like any other function. If you input 2, you still get 7.
Let us now see a lambda expression with more than one input. Suppose you are
processing user data from a web registration form, and would like to
combine the first and last names into a single full name for displaying on the
user interface. We will call this lambda expression full name. This anonymous
function will have two inputs: first name and last name.
For both the first and last names, we will remove the leading and trailing
whitespace with the strip function. We will also ensure that only the first
letter of each string is capitalized with the title function. This is
necessary because humans are sloppy when typing. Notice we separated the first and
last names with a space. Let us now test this lambda expression.
You use it just like any other function. Outstanding. We should not judge Euler's
typing skills. This is the first time he has ever used a computer. Here is the
general way to create a lambda expression: you type the keyword lambda
followed by zero or more inputs. Just like functions, it is perfectly
acceptable to have anonymous functions with no inputs. Next, type a colon. Then
finally, you enter a single expression. This expression is the return value. You
cannot use lambda expressions for multi-line functions. Let us now see a
common use of lambda expressions where we do not give it a name. Suppose we have
a list of science fiction authors. We would like to sort this list by last
name. Notice that some of these authors have a middle name, while others have
initials. Our strategy will be to create an anonymous function that extracts the
last name, and uses that as the sorting value. Lists have a built-in method
called sort. To see how to use it call the help function on the method name. The
key argument is a function that will be used for sorting. We will pass it a
lambda expression. To access the last name, split the string into pieces
wherever it has a space. Next, access the last piece by index negative 1. As a
final precaution, convert the string to lowercase. This way, the sorting is not
case-sensitive. Trust me - some people do not know how to
use the shift key. The list is now in alphabetical order.
These names are a pleasure to read.
We must go deeper. Next we will write a function that makes functions.
Suppose you are working with quadratic functions. Perhaps you are
computing the trajectories of cannonballs - something you should know
how to do before becoming a pirate. To do this, let's write a function called build
quadratic function. The inputs are the three coefficients A, B, and C. Naturally,
we write a docstring. And with a single line we return an
anonymous quadratic function with these coefficients. Let's test this by creating
the function 2x squared plus 3x minus 5. If you test this for the input 0 1 & 2
you can see this function works correctly. And just for bites and giggles,
let's make and use a quadratic function without ever giving it a name. Let's
create a different function and then pass in the value 2. This code creates
the function 3x squared plus 1 and passes in the value 2 which should give
us 13... and it does. This is a useful demonstration, but it is not the most
readable code. Sometimes, an extra line is perfectly fine.
Lambda expressions are quite useful when you need a short, throwaway function.
Something simple that you will only use once.
Common applications are sorting and filtering data.
And while we are on the subject, did you know that Socratica has a sorted
list of Python videos? Unlike lambda expressions, we would prefer NOT to
remain anonymous... so if you know someone who is learning Python or SHOULD learn
Python, please, send them our way.
We will upgrade their knowledge banks as best we can...