0% found this document useful (0 votes)
6 views6 pages

Functional Programming Concepts in Python

The document provides an introduction to functional programming in Python, highlighting key concepts such as first-class functions and the use of map(), filter(), and reduce() functions for data processing. It explains the syntax, functionality, and examples of each function, as well as comparisons with list comprehensions. The document emphasizes the importance of choosing the right approach for data manipulation based on readability and efficiency.

Uploaded by

raghuveera97n
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views6 pages

Functional Programming Concepts in Python

The document provides an introduction to functional programming in Python, highlighting key concepts such as first-class functions and the use of map(), filter(), and reduce() functions for data processing. It explains the syntax, functionality, and examples of each function, as well as comparisons with list comprehensions. The document emphasizes the importance of choosing the right approach for data manipulation based on readability and efficiency.

Uploaded by

raghuveera97n
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

Introduction to Functional Programming in Python

Functional programming is a programming style that treats computation as the


evaluation of mathematical functions and avoids changing state and mutable data. In
Python, this paradigm is supported by several key features, including treating
functions as first-class objects, which means they can be passed as arguments,
returned from other functions, and assigned to variables.

The functions map(), filter(), and reduce() are cornerstone concepts of functional
programming that allow for elegant and efficient data processing.

1. The map() Function


The map() function applies a specified function to each item of an iterable (like a list,
tuple, etc.) and returns an iterator that yields the results.

How map() Works


It takes a function and one or more iterables as arguments. It then creates an iterator
that computes the function for the corresponding elements of the iterables.

Syntax:
map(function, iterable_1, iterable_2, ...)
Parameter Description

function The function to execute for each item.

iterable One or more iterables (e.g., list, tuple) to be


mapped.

Return Value:
map() returns a map object, which is an iterator. This is memory-efficient because it calculates
the items only as they are needed (lazy evaluation), rather than creating a new list in memory
all at once. To see the results, you typically convert the iterator to a list using list().
Examples
Example 1: Using a defined function
Let's square every number in a list.
def square(n):​
return n * n​

numbers = [1, 2, 3, 4, 5]​
squared_numbers_iterator = map(square, numbers)​

# Convert the iterator to a list to see the output​
squared_numbers_list = list(squared_numbers_iterator)​
print(squared_numbers_list)​
# Output: [1, 4, 9, 16, 25]​

Example 2: Using a lambda function for conciseness


lambda functions are anonymous, one-line functions that are often used with map().
numbers = [1, 2, 3, 4, 5]​
# Use a lambda to define the squaring operation inline​
squared_numbers = list(map(lambda x: x * x, numbers))​
print(squared_numbers)​
# Output: [1, 4, 9, 16, 25]​

Example 3: Using map() with multiple iterables


The function must accept as many arguments as there are iterables.
list1 = [1, 2, 3]​
list2 = [4, 5, 6]​

# Add corresponding elements from two lists​
sums = list(map(lambda x, y: x + y, list1, list2))​
print(sums)​
# Output: [5, 7, 9]​

map() vs. List Comprehension


List comprehensions are often considered more "Pythonic" and readable for simple
mapping operations.

Feature map() List Comprehension

Syntax map(lambda x: x*2, my_list) [x*2 for x in my_list]

Return Type Iterator (lazy, List (eager, consumes


memory-efficient) memory upfront)

Readability Can be less direct for simple Often considered more


operations readable
Use with lambda Very common, but can add Expression is inline, no lambda
complexity needed

Use Case Best when applying an Best for simple, inline


existing, complex function. transformations.

2. The filter() Function


The filter() function constructs an iterator from elements of an iterable for which a
function returns True. In simple terms, it filters an iterable, keeping only the items that
satisfy a condition.

How filter() Works


It takes a function (that returns a boolean) and an iterable. It applies the function to
each item and returns an iterator containing only the items for which the function
evaluated to True.

Syntax:
filter(function, iterable)
Parameter Description

function A function that tests if each element returns


True or False.

iterable The iterable to be filtered.

Return Value:
Like map(), filter() returns a filter object, which is an iterator.
Examples
Example 1: Filtering even numbers

def is_even(n):​
return n % 2 == 0​

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]​
even_numbers = list(filter(is_even, numbers))​
print(even_numbers)​
# Output: [2, 4, 6, 8, 10]​
Example 2: Using a lambda function

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]​


odd_numbers = list(filter(lambda x: x % 2 != 0, numbers))​
print(odd_numbers)​
# Output: [1, 3, 5, 7, 9]​

Example 3: Using None as the function


If None is passed as the function, filter() removes all items from the iterable that are "falsy"
(e.g., 0, "", False, None, empty lists []).
messy_data = [0, 1, "hello", "", False, True, [], [1,2]]​
clean_data = list(filter(None, messy_data))​
print(clean_data)​
# Output: [1, 'hello', True, [1, 2]]​

filter() vs. List Comprehension


List comprehensions with an if clause are a common alternative to filter().

Feature filter() List Comprehension (with


if)

Syntax filter(lambda x: x > 0, my_list) [x for x in my_list if x > 0]

Return Type Iterator (lazy, List (eager, consumes


memory-efficient) memory upfront)

Readability Can be less direct for simple Often more readable and
conditions. self-contained.

Use Case Good for filtering with an Preferred for most filtering
existing function. tasks.

3. The reduce() Function


The reduce() function is used to apply a function of two arguments cumulatively to
the items of a sequence, from left to right, so as to reduce the sequence to a single
final value.

Important: reduce() is not a built-in function. It is part of the functools module and
must be imported.

How reduce() Works


reduce() applies the function to the first two elements of the iterable. It then applies
the same function to the result of that call and the next element, and so on, until the
iterable is exhausted.

Syntax:
functools.reduce(function, iterable[, initializer])
Parameter Description

function A function that takes two arguments and


performs an operation.

iterable The sequence of items to be reduced.

initializer (Optional) A starting value placed before the


first element.

Examples
Example 1: Summing a list of numbers

from functools import reduce​


import operator​

numbers = [1, 2, 3, 4]​

# Using a lambda function​
total = reduce(lambda x, y: x + y, numbers)​
print(f"Sum with lambda: {total}") # How it works: (((1+2)+3)+4) = 10​

# Using a function from the operator module is often cleaner​
total_op = reduce(operator.add, numbers)​
print(f"Sum with operator.add: {total_op}")​

Example 2: Finding the maximum value

from functools import reduce​



numbers = [3, 5, 2, 8, 4]​
max_value = reduce(lambda x, y: x if x > y else y, numbers)​
print(f"Max value: {max_value}")​

Example 3: Using the initializer


The initializer acts as a starting value for the reduction.
from functools import reduce​

numbers = [1, 2, 3, 4]​

# Calculate the sum starting from 100​
total_with_initializer = reduce(lambda x, y: x + y, numbers, 100)​
print(f"Sum with initializer: {total_with_initializer}") # How it works: ((((100+1)+2)+3)+4)
= 110​

When to Use reduce()


While powerful, reduce() can sometimes make code harder to read than a simple for
loop. It's best used when the operation is simple and well-understood, like summing or
finding a product. For more complex reductions, a for loop is often more explicit and
maintainable.

# The same sum calculation with a for loop​


total_loop = 0​
for num in [1, 2, 3, 4]:​
total_loop += num​
print(f"Sum with loop: {total_loop}")​

You might also like