Functional Python programming : discover the power of functional programming, generator functions, lazy evaluation, the built-in itertools library, and monads /
Python is an easy-to-learn and extensible programming language that offers a number of functional programming features. This practical guide demonstrates the Python implementation of a number of functional programming techniques and design patterns. Through this book, you'll understand what fun...
Clasificación: | Libro Electrónico |
---|---|
Autor principal: | |
Formato: | Electrónico eBook |
Idioma: | Inglés |
Publicado: |
Birmingham, UK :
Packt Publishing,
2018.
|
Edición: | Second edition. |
Temas: | |
Acceso en línea: | Texto completo |
Tabla de Contenidos:
- Cover
- Copyright and Credits
- Packt Upsell
- Contributors
- Table of Contents
- Preface
- Chapter 1: Understanding Functional Programming
- Identifying a paradigm
- Subdividing the procedural paradigm
- Using the functional paradigm
- Using a functional hybrid
- Looking at object creation
- The stack of turtles
- A classic example of functional programming
- Exploratory data analysis
- Summary
- Chapter 2: Introducing Essential Functional Concepts
- First-class functions
- Pure functions
- Higher-order functions
- Immutable data
- Strict and non-strict evaluation
- Recursion instead of an explicit loop state
- Functional type systems
- Familiar territory
- Learning some advanced concepts
- Summary
- Chapter 3: Functions, Iterators, and Generators
- Writing pure functions
- Functions as first-class objects
- Using strings
- Using tuples and named tuples
- Using generator expressions
- Exploring the limitations of generators
- Combining generator expressions
- Cleaning raw data with generator functions
- Using lists, dicts, and sets
- Using stateful mappings
- Using the bisect module to create a mapping
- Using stateful sets
- Summary
- Chapter 4: Working with Collections
- An overview of function varieties
- Working with iterables
- Parsing an XML file
- Parsing a file at a higher level
- Pairing up items from a sequence
- Using the iter() function explicitly
- Extending a simple loop
- Applying generator expressions to scalar functions
- Using any() and all() as reductions
- Using len() and sum()
- Using sums and counts for statistics
- Using zip() to structure and flatten sequences
- Unzipping a zipped sequence
- Flattening sequences
- Structuring flat sequences
- Structuring flat sequences
- an alternative approach
- Using reversed() to change the order.
- Using enumerate() to include a sequence number
- Summary
- Chapter 5: Higher-Order Functions
- Using max() and min() to find extrema
- Using Python lambda forms
- Lambdas and the lambda calculus
- Using the map() function to apply a function to a collection
- Working with lambda forms and map()
- Using map() with multiple sequences
- Using the filter() function to pass or reject data
- Using filter() to identify outliers
- The iter() function with a sentinel value
- Using sorted() to put data in order
- Writing higher-order functions
- Writing higher-order mappings and filters
- Unwrapping data while mapping
- Wrapping additional data while mapping
- Flattening data while mapping
- Structuring data while filtering
- Writing generator functions
- Building higher-order functions with callables
- Assuring good functional design
- Review of some design patterns
- Summary
- Chapter 6: Recursions and Reductions
- Simple numerical recursions
- Implementing tail-call optimization
- Leaving recursion in place
- Handling difficult tail-call optimization
- Processing collections through recursion
- Tail-call optimization for collections
- Reductions and folding a collection from many items to one
- Group-by reduction from many items to fewer
- Building a mapping with Counter
- Building a mapping by sorting
- Grouping or partitioning data by key values
- Writing more general group-by reductions
- Writing higher-order reductions
- Writing file parsers
- Parsing CSV files
- Parsing plain text files with headers
- Summary
- Chapter 7: Additional Tuple Techniques
- Using tuples to collect data
- Using named tuples to collect data
- Building named tuples with functional constructors
- Avoiding stateful classes by using families of tuples
- Assigning statistical ranks
- Wrapping instead of state changing.
- Rewrapping instead of state changing
- Computing Spearman rank-order correlation
- Polymorphism and type-pattern matching
- Summary
- Chapter 8: The Itertools Module
- Working with the infinite iterators
- Counting with count()
- Counting with float arguments
- Re-iterating a cycle with cycle()
- Repeating a single value with repeat()
- Using the finite iterators
- Assigning numbers with enumerate()
- Running totals with accumulate()
- Combining iterators with chain()
- Partitioning an iterator with groupby()
- Merging iterables with zip_longest() and zip()
- Filtering with compress()
- Picking subsets with islice()
- Stateful filtering with dropwhile() and takewhile()
- Two approaches to filtering with filterfalse() and filter()
- Applying a function to data via starmap() and map()
- Cloning iterators with tee()
- The itertools recipes
- Summary
- Chapter 9: More Itertools Techniques
- Enumerating the Cartesian product
- Reducing a product
- Computing distances
- Getting all pixels and all colors
- Performance analysis
- Rearranging the problem
- Combining two transformations
- Permuting a collection of values
- Generating all combinations
- Recipes
- Summary
- Chapter 10: The Functools Module
- Function tools
- Memoizing previous results with lru_cache
- Defining classes with total ordering
- Defining number classes
- Applying partial arguments with partial()
- Reducing sets of data with the reduce() function
- Combining map() and reduce()
- Using the reduce() and partial() functions
- Using the map() and reduce() functions to sanitize raw data
- Using the groupby() and reduce() functions
- Summary
- Chapter 11: Decorator Design Techniques
- Decorators as higher-order functions
- Using the functools update_wrapper() functions
- Cross-cutting concerns
- Composite design
- Preprocessing bad data.
- Adding a parameter to a decorator
- Implementing more complex decorators
- Complex design considerations
- Summary
- Chapter 12: The Multiprocessing and Threading Modules
- Functional programming and concurrency
- What concurrency really means
- The boundary conditions
- Sharing resources with process or threads
- Where benefits will accrue
- Using multiprocessing pools and tasks
- Processing many large files
- Parsing log files
- gathering the rows
- Parsing log lines into namedtuples
- Parsing additional fields of an Access object
- Filtering the access details
- Analyzing the access details
- The complete analysis process
- Using a multiprocessing pool for concurrent processing
- Using apply() to make a single request
- Using the map_async(), starmap_async(), and apply_async() functions
- More complex multiprocessing architectures
- Using the concurrent.futures module
- Using concurrent.futures thread pools
- Using the threading and queue modules
- Designing concurrent processing
- Summary
- Chapter 13: Conditional Expressions and the Operator Module
- Evaluating conditional expressions
- Exploiting non-strict dictionary rules
- Filtering true conditional expressions
- Finding a matching pattern
- Using the operator module instead of lambdas
- Getting named attributes when using higher-order functions
- Starmapping with operators
- Reducing with operator module functions
- Summary
- Chapter 14: The PyMonad Library
- Downloading and installing
- Functional composition and currying
- Using curried higher-order functions
- Currying the hard way
- Functional composition and the PyMonad * operator
- Functors and applicative functors
- Using the lazy List() functor
- Monad bind() function and the>> operator
- Implementing simulation with monads
- Additional PyMonad features
- Summary.
- Chapter 15: A Functional Approach to Web Services
- The HTTP request-response model
- Injecting state through cookies
- Considering a server with a functional design
- Looking more deeply into the functional view
- Nesting the services
- The WSGI standard
- Throwing exceptions during WSGI processing
- Pragmatic WSGI applications
- Defining web services as functions
- Creating the WSGI application
- Getting raw data
- Applying a filter
- Serializing the results
- Serializing data into JSON or CSV formats
- Serializing data into XML
- Serializing data into HTML
- Tracking usage
- Summary
- Chapter 16: Optimizations and Improvements
- Memoization and caching
- Specializing memoization
- Tail recursion optimizations
- Optimizing storage
- Optimizing accuracy
- Reducing accuracy based on audience requirements
- Case study-making a chi-squared decision
- Filtering and reducing the raw data with a Counter object
- Reading summarized data
- Computing sums with a Counter object
- Computing probabilities from Counter objects
- Computing expected values and displaying a contingency table
- Computing the chi-squared value
- Computing the chi-squared threshold
- Computing the incomplete gamma function
- Computing the complete gamma function
- Computing the odds of a distribution being random
- Functional programming design patterns
- Summary
- Other Books You May Enjoy
- Index.