Functions - advanced
Contents
24. Functions - advanced#
Author: Tue Nguyen
24.1. Outline#
Lambda functions
Scope of variables
Flexible arguments
Document a function
24.2. Lambda functions#
We use
defto define regular functionsWe use
lambdaquickly define simple functions (normally in one line)Sometimes, we want to quickly define a function without a name (thinking of a name may be time-consuming)
They are called anonymous functions
We define anonymous functions using
lambdaAnonymous functions are used to support other operations such as sorting and filtering
24.2.1. Named lambda functions#
Syntax:
func_name = lambda params: codecodecan be a statement or an expressionNo need to use
returnbecause Python will return the value of the expression
a) Ex 1: greeting
# Define the function
say_hi = lambda name: print(f"Hi {name}")
# Call
say_hi("Tom")
Hi Tom
b) Ex 2: add 2 numbers
# Define
add = lambda a, b: a + b
# Call
add(2, 3)
5
Ex 3: \(f(x) = x^2 + 2x + 5\)
# Define
f = lambda x: x**2 + 2*x + 5
# Call
f(1)
8
Ex 4: \(g(x, y) = x^2 + 2xy + 3y^2\)
# Define
g = lambda x, y: x**2 + 2*x*y + 3*y**2
# Call
g(2, 1)
11
24.2.2. Anonymous lambda function#
Syntax:
lambda params: codeAn anonymous function cannot stand on its own but must be used in another operation such as sorting or filter
a) Ex 1: sorting
Suppose we have a list of students
Each element of this list is a tuple of 2 entries
The first entry is the student’s name
The second entry is the student grade
We might want to sort the student by name or grade
# Init the list of students
students = [("John", 6), ("Alex", 5.5), ("Jane", 9), ("Peter", 8)]
students
[('John', 6), ('Alex', 5.5), ('Jane', 9), ('Peter', 8)]
# Case 1: Sort by name (ascending order)
sorted(students, key=lambda x: x[0])
[('Alex', 5.5), ('Jane', 9), ('John', 6), ('Peter', 8)]
Comments
The function
sortedwill sort the liststudentsbykeykeyexpects a function that does something to each element of the list and returns a value for that elementsortedwill then sortstudentsbased on those returned valuesIn the above example,
key=lambda x: x[0]means thatIterate through each element of the list
studentsusing variablexAt each element, return the first entry of
x(orx[0])Then sort the list
studentsby those first entries
As a result, you can see the list
studentsis sorted by name in the ascending order
# Case 2: Sort by name (descendin order)
# Just pass reverse=True
sorted(students, key=lambda x: x[0], reverse=True)
[('Peter', 8), ('John', 6), ('Jane', 9), ('Alex', 5.5)]
# Case 3: Sort by grade (ascending order)
# Very similar to Case 1
# Just need to change the expression to x[1]
sorted(students, key=lambda x: x[1])
[('Alex', 5.5), ('John', 6), ('Peter', 8), ('Jane', 9)]
Remarks
For now, the use of lambda functions is very limited including
Quickly define short and simple functions
Define anonymous function to use in
sorted
However, anonymous lambda functions will be very convenient for real-life data manipulation when used with
pandas(which will be discussed in a separate series)
24.3. Scope of variables#
To be updated
24.4. Flexible arguments#
To be updated
24.5. Document a function#
To be updated