Book Image

Functional Python Programming, 3rd edition - Third Edition

By : Steven F. Lott
Book Image

Functional Python Programming, 3rd edition - Third Edition

By: Steven F. Lott

Overview of this book

Not enough developers understand the benefits of functional programming, or even what it is. Author Steven Lott demystifies the approach, teaching you how to improve the way you code in Python and make gains in memory use and performance. If you’re a leetcoder preparing for coding interviews, this book is for you. Starting from the fundamentals, this book shows you how to apply functional thinking and techniques in a range of scenarios, with Python 3.10+ examples focused on mathematical and statistical algorithms, data cleaning, and exploratory data analysis. You'll learn how to use generator expressions, list comprehensions, and decorators to your advantage. You don't have to abandon object-oriented design completely, though – you'll also see how Python's native object orientation is used in conjunction with functional programming techniques. By the end of this book, you'll be well-versed in the essential functional programming features of Python and understand why and when functional thinking helps. You'll also have all the tools you need to pursue any additional functional topics that are not part of the Python language.
Table of Contents (18 chapters)
Preface
16
Other Books You Might Enjoy
17
Index

5.7 Writing higher-order mappings and filters

Python’s two built-in higher-order functions, map() and filter(), generally handle almost everything we might want to throw at them. It’s difficult to optimize them in a general way to achieve higher performance. We’ll look at similar functions such as imap() in Chapter 14, The Multiprocessing, Threading, and Concurrent.Futures Modules.

We have three largely equivalent ways to express a mapping. Assume that we have some function, f(x), and some collection of objects, C. The ways we can compute a mapping from the domain value in C to a range value are as follows:

  • The map() function:

    map(f, C)
  • A generator expression:

    (f(x) for x in C)
  • A generator function with a yield statement:

    from collections.abc import Callable, Iterable, Iterator 
    from typing import Any 
     
    def mymap(f: Callable[[Any], Any], C: Iterable[Any]) -> Iterator[Any]: 
        for x in C: 
       ...