A curated list of awesome things related to functional programming in Python.
- Functional Programming HOWTO - "In this document, we’ll take a tour of Python’s features suitable for implementing programs in a functional style".
- Functional Programming in Python - Book by David Mertz (O'Reilly).
- Functional Python Programming - Book by Steve Lott (Packtpub, 2015).
- Functional Programming with Python (slides) - Alexey Kachayev, UA PYCon 2012.
- Purely Functional Programming in Python: Pure Fun (slides) - Christopher Armstrong, PyTenessee 2015.
- Side Effects are a Public API (video) - Christopher Armstrong, Strangeloop 2015
- Functional Programming with Python (video) - Mike Müller, PyCon US 2013.
- Using Functional Programming for efficient Data Processing and Analysis (video) - Reuben Cummings, PyCon US 2017.
- Immutable Programming Writing Functional Python (slides, video), Calen Pennington, PyCon 2017.
- Functional Programming inside OOP? It’s possible with Python (Slides) - Carlos Villavicencio, EuroPython 2021.
- A Hitchhiker’s Guide to functools (Slides) - Scott Irwin, EuroPython 2021.
- Writing Functional Code in Python (Video) - Vic Kumar, PyCon 2022
- Functionalish programming in Python with effect (video), Robert Collins, NZ PyCon 2015.
- Monadic Parsing in Python (slides), Alexey Kachayev, KyivPy 2014.
- Immutability and Python - Introducing Pyrsistent (slides), Tobias Gustafsson, 2014.
- Understanding Transducers (slides, video), Austin Bingham, PyCon Belarus 2015.
- Functional Performance with Core Data Structures (video), Matthew Rocklin, PyData SV 2014.
- Old School - Functional Data Analysis (video), Matthew Rocklin, PyData NYC 2013.
- Learning Data Science Using Functional Python (video, slides), Joel Grus, PyData Seattle 2015.
- Functional Programming with Python - by Christopher Armstrong, O'Reilly.
- Functional Programming in 7 days - by Mohammed Kashif, Udemy.
- Functional Programming in Python - by Dan Bader, Real Python.
- Origins of Python's "Functional" Features, Guido Van Rossum, 2009.
- A practical introduction to functional programming (with examples in Python), by Mary Rose Cook (year unknown).
- Immutable data structures in Python, Robert Rees, 2014.
- Understanding Transducers through Python, by Robert Smallshire. "In this 8 parts series we take an in-depth look at transducers. Transducers – a portmanteau of ‘transform reducers’ – are a new functional programming concept introduced into the Clojure programming language."
- Thinking Functionally with Python and Django at eShares Inc., Kyle Hanson, 2017.
- Simple dependent types in Python - Nikita Sobolev, 2019.
- Python exceptions considered an anti-pattern, Nikita Sobolev, 2019.
- Enforcing Single Responsibility Principle in Python - Nikita Sobolev, 2019.
- Typed functional Dependency Injection in Python - Nikita Sobolev, 2020.
- 4 Part Series on Functional Programming Techniques and Design In Python M. Kocher, 2019.
- Typeclasses in Python - N. Sobolev, 2021
- Functools — The Power of Higher-Order Functions in Python - M. Heinz, 2021
- Tail Recursion Elimination - Guido van Rossum, 2009
- Final Words on Tail Calls - Guido van Rossum, 2009
- The fate of reduce() in Python 3000 - Guido van Rossum, 2005
- Best Practices for Using Functional Programming in Python - Kite Blog, 2018.
- (Dead initiative) Why we need a Python functional programming initiative: a manifesto - Leftfile 2023
- Practical Functional Reactive Programming (PDF), John Peterson, Ken Roe, and Alan Cleary, 2014.
- Python Generators, Samuel Lampa, From talk at PySthlm meetup, Oct 2013
- toolz ★4702 - "A functional standard library for Python".
- more-itertools ★3734 - "More routines for operating on iterables, beyond itertools".
- funcy ★3376 - "A fancy and practical functional tools".
- fn.py ★3352 - "Functional programming in Python: implementation of missing features to enjoy FP" (unmaintained since 2014). Unmaintained fork.
- PyFunctional ★2402 - "Python library for functional programming with collections in a data pipeline style".
- Pipe ★1951 - "A Python library to use infix notation in Python".
- Pydash ★1326 - "The kitchen sink of Python utility libraries for doing "stuff" in a functional way. Based on the Lo-Dash Javascript library".
- hask ★860 - "Haskell language features and standard libraries in pure Python".
- OSlash ★715 - "Functors, Applicatives, And Monads in Python".
- Expression ★493 - "Pragmatic functional programming for Python inspired by F#". Successor of OSlash.
- Effect ★372 - "Effect isolation in Python, to facilitate more purely functional code".
- Underscore.py ★291 - "A Python port of excellent javascript library underscore.js".
- fnc ★256 - "Functional programming in Python with generators and other utilities".
- PyMonad ★197 - "a small library implementing monads and related data abstractions -- functors, applicative functors, and monoids -- for use in implementing functional style programs".
- Flupy ★193 - Implements a fluent interface for operating on python iterables.
- pfun ★150 - "Pure functional programming in python".
- Phi ★134 - "A library that intends to remove as much of the pain as possible from your functional programming experience in Python."
- pyramda ★127 - "Python package supporting heavy functional programming through currying. Translation of the Ramda library from javascript to python".
- unpythonic ★91 - "Supercharge your Python with parts of Lisp and Haskell."
- ziopy ★76 - "ZIO for Python (with ZIO = A type-safe, composable library for async and concurrent programming in Scala)"
- pyMonet ★34 - "High abstract python library for functional programming. Contains algebraic data structures known from Haskell or Scala".
- Compose ★32 - The classic compose, with all the Pythonic features.
- pyeffects ★31 - "Handle side-effects in Python like a boss. Implements functional types for Either, Option, Try, and Future."
- Iterpy ★10 - map, filter etc. as methods on a sequence.
- returns ★3572 - "Make your functions return something meaningful, typed, and safe!"
- result ★1581 - A simple Rust like Result type for Python 3. Fully type annotated.
- Option ★85 - Rust-like Option and Result types in Python.
- Meiga ★76 - A simple, typed and monad-based Result type for Python.
- maybe ★64 - A simple Rust like Maybe type for Python 3. Fully type annotated.
- Safetywrap ★44 - Fully typesafe, Rust-like Result and Option types for Python.
- Pyrsistent ★2028 - "Persistent/Immutable/Functional data structures for Python".
- Immutables ★1132 - "An immutable mapping type for Python."
Dead projects:
- Discodb ★99 - "An efficient, immutable, persistent mapping object".
- Funktown ★75 - "Immutable Data Structures for Python".
- Amino ★35 - "functional data structures and type classes".
- Pysistence - "Pysistence is a project that seeks to make functional programming in python easier".
Note: Pattern matching is now a standard feature in Python 3.10.
- pampy ★3516 - "Pampy: The Pattern Matching for Python you always dreamed of."
- python-pattern-matching ★162 - "Python pattern matching like functional languages."
- patmat ★29 - "Functional-style recursive pattern matching in Python. Crazy stuff."
- apm ★107 - "Pattern Matching for Python 3.8+ in a simple, yet powerful, extensible manner."
(Both projects are dead).
- Tranducers-Python ★201 - "Transducers are composable algorithmic transformations".
- Transducers ★55 - "This is a port of the transducer concept from Clojure to Python, with an emphasis on providing as Pythonic as interpretation of transducers as possible, rather than reproducing Clojurisms more literally".
- RxPy ★4790 - "Reactive Extensions for Python".
- broqer ★74 - "Library to operate with continuous streams of data in a reactive style"
- sodium-python ★4 - "Python implementation of Sodium - Functional Reactive Programming (FRP) Library"
- Glom ★1914 - "Python's nested data operator (and CLI), for all your declarative restructuring needs.".
- python-lenses ★310 - "A python lens library for manipulating deeply nested immutable structures".
- deal ★743 - "Design by contract for Python with many validators support."
- classes ★667 - "Smart, pythonic, ad-hoc, typed polymorphism for Python."
- chainable ★193 - "Method chaining built on generators".
- ADT ★172 - Algebraic data types for Python
- sumtypes ★42 - "Sum Types, aka Tagged Unions, for Python".
- python-mini-lambda ★14 - "Simple Lambda functions without lambda x: and with string conversion capability"
- slist ★12 - "A drop-in replacement for the python mutable list. But with much more methods for typesafe method chaining."
- Orinoco ★11 - "Functional composable pipelines allowing clean separation of the business logic and its implementation"
- py-frm ★1 - "Proof-of-concept Functional-Relational Mapping (FRM) for Python"
Functional programming languages that are not Python but are related to the Python ecosystem:
- Hy ★5134 - "A dialect of Lisp that's embedded in Python".
- Coconut ★4091 - "Simple, elegant, Pythonic functional programming".
- Basilisp ★279 - "A Clojure-compatible(-ish) Lisp dialect targeting Python 3.8+".
- pixie ★2347 - "A lightweight and native lisp built in RPython". (Discussion on HN)
- Mochi ★915 - "A dynamically typed programming language for functional programming and actor-style programming.".
- dg (aka dogelang) ★577 - "A programming language that compiles to CPython bytecode, much like Scala compiles to JVM's. That essentially means that dg is an alternative syntax for Python 3."
- Pycket ★258 - "A rudimentary Racket implementation using RPython".
- Tydy ★52 - "Tydy is a statically typed, functional-first programming language in the ML tradition. tydy is an implementation of Tydy as a Python library."
- Arza ★5 - "Arza is a functional programming language that compiles to Python. It is a statically typed language with type inference and type classes."
- (How to Write a (Lisp) Interpreter (in Python)) and (An ((Even Better) Lisp) Interpreter (in Python)) - a couple of famous articles by Peter Norvig.