Sobes.tech
Middle

How does Python support functional programming?

sobes.tech AI

Answer from AI

Python is not a purely functional language, but it supports many functional programming concepts:

  • Functions as first-class objects: Functions can be passed as arguments, returned from other functions, and assigned to variables.
  • Anonymous (lambda) functions: Allow creating small functions without declaring a name.
  • map(), filter(), reduce(): Built-in functions for working with lists in a functional style (although reduce() has been moved to the functools module in Python 3).
  • Generators and iterators: Support lazy evaluation, which is typical for a functional approach, avoiding the creation of intermediate data structures.
  • Immutable data types: Supports tuples and frozensets, which are immutable, making it easier to write pure functions.
  • Decorators: Allow modifying the behavior of functions or classes without changing their source code, which can be seen as a form of metaprogramming often found in functional languages.
  • itertools and functools modules: Provide additional tools for working in a functional style, such as functions for combinatorial logic and partial application of functions.
// Example of using first-class functions, lambda, and map()
def apply_func(func, value):
    return func(value)

square = lambda x: x**2
numbers = [1, 2, 3, 4]

# Applying lambda via apply_func
result = [apply_func(square, num) for num in numbers]
print(result) # Output: [1, 4, 9, 16]

# Using map()
result_map = list(map(square, numbers))
print(result_map) # Output: [1, 4, 9, 16]
# Example of using filter()
def is_even(x):
    return x % 2 == 0

even_numbers = list(filter(is_even, numbers))
print(even_numbers) # Output: [2, 4]
# Example of using reduce() (requires import)
from functools import reduce

def add(x, y):
    return x + y

sum_of_numbers = reduce(add, numbers)
print(sum_of_numbers) # Output: 10

Thus, Python allows writing code in a functional style, although it does not impose it, maintaining its multiparadigm nature.