## Python Higher Order Functions

Last Updated On Monday 1st Nov 2021

## Higher-Order Functions in Python.

### Function

It can take one or more functions as parameters.It can be returned as a result of another function.It can be modified.It can be assigned to a variable.

## Function as a Return Value

	def square(x):          # a square function
return x ** 2

def cube(x):            # a cube function
return x ** 3



## Python Decorators

A decorator is a design pattern in Python that allows a user to add new functionality to an existing object without modifying its structure. Decorators call before the definition of a function you want to decorate.

### Creating Decorators

To create a decorator function, we need an outer function with an inner wrapper function.

	def welcome():
return 'Hey Hello'

def makeMeLower(function):
def cont():
func = function()
make_lowercase = func.lower()
return make_lowercase
return cont

output = makeMeLower(welcome)
print(output()) # hey hello



## Accepting Parameters in Decorator Functions

We need our functions to take parameters most of the time, so we might need to define a decorator that accepts parameters.

	def withParams(function):
def acceptParams(p1, p2):
function(p1, p2)
print("I live in {}".format(p2))
return acceptParams

@withParams
def printMe(name, country):
print("I am {} and I Know Coding.".format(
name, country))

# I am Adam, and I Know Coding.
# I live in Birmingham



## Built-in Higher-Order Functions

• Some of the built-in higher-order functions covered in this part are map(), filter, and reduce.
• Lambda function can be passed as a parameter, and the best use case of lambda functions is in functions like map, filter, and reduce.

### Python – Map Function

The map() function is a built-in function that takes a function and is iterable as parameters.

	# syntax
map(function, iterable)


	nums = ['1', '2', '3', '4', '5']
output = map(int, nums)
print(list(output))    # [1, 2, 3, 4, 5]


	names = ['Adam', 'Lovlin', 'Anderson', 'Pope']

def upperMe(name):
return name.upper()

output = map(upperMe, names)
print(list(output)) # ['ADAM', 'LOVLIN', 'ANDERSON', 'POPE']



### Python – Filter Function

• The filter() function calls the specified function, which returns a boolean for each item of the specified iterable (list).
• It filters the items that satisfy the filtering criteria.
	# syntax
filter(function, iterable)


	numbers = [1, 2, 3, 4, 5]  # iterable

def findOdd(num):
if num % 2 != 0:
return True
return False

output = filter(findOdd, numbers)
print(list(output))  # [1, 3, 5]



## Python – Reduce Function

• The reduce() function is defined in the functools module, and we should import it from this module.
• Like map and filter, it takes two parameters, a function and an iterable.
• However, it doesn’t return another iterable. Instead it returns a single value.
	from functools import reduce
nums = ['1', '2', '3', '4', '5']  # iterable
print(total)    # 15