# Lecture 24

## Higher-order functions & lambda

MCS 260 Fall 2021
David Dumas

## Reminders

• Homework 8 due tomorrow at 10am
• Midterm letter grades will be posted Wednesday
• Project 3 will be announced this week
• ## sum

The built-in function sum(L) takes an iterable L and returns the sum of all its elements.

## Higher-order functions

Previously (Lec 20): functions are values

Functions can take other functions as arguments


def dotwice(f):
"""Call the function f twice (with no arguments)"""
f()
f()


A function that accepts function arguments is sometimes called a higher-order function.

See dotwice.py.

## Example

A function announce_call(f) that calls a given function f, but prints a message before and after.

See announce.py.

## Example

A function that loops from 0 to 100, but accepts a function to increment the value.

See looper.py.

## Example

A function nest(func,val,times) that applies function func a specified number of times to val i.e.

• nest(f,x,3) should return the value of f(f(f(x)))
• next(h,y,2) should return the value of h(h(y))

See nest.py.

## Example

A function repeat_until_acceptable(getval,testfn) that calls getval repeatedly until the return value is one for which testfn returns True.

## lambda

In Python, you can create a function with no name using the syntax:


lambda x: x*x    # param x, return value x*x
lambda x,y: x-y  # params x and y, return value x-y


lambda gives you the function object, so the value of


lambda x,y: x-y


is the same as the value of


diff


if you previously defined


def diff(x,y):
return x-y


## When to use lambda

Functions definitely deserve names if they are used in several places, or if they are complicated.

But lambda is good for simple functions used once, so the definition appears in the only place of use.

## Common use for lambda

The built-in functions max, min, and list.sort accept a keyword argument key that is a function which is applied to elements before making comparisons.

e.g. if L is a list of words, then max(L,key=len) is the longest word.

### Revision history

• 2021-10-18 Initial publication
• 2021-10-19 Links to sample code