-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Python Functional Programming Course
Functional Programming Course Overview
Below you can find the ordered content of the topic, in a linear progression
The linear progression of content aims to cover all content, course by course, workout by workout as follows:
- first course is the only core one, denoted by its manifest
- the next course is denoted by the first item of the next array in each course manifest
- each course has its order of workouts designated by the sections field in the same aforementioned manifest
1. arrays-i
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | the-slice-built-in-function | ✅ | 👶 introduction 💪 workout 🦑 deep |
use-iteration-protocol.1: 10 | ✅ | ✅ | ✅ | ✅ |
2 | the-reversed-built-in-function | ✅ | 👶 introduction 💪 workout 🦑 deep |
use-iteration-protocol.1: 10 | ✅ | ✅ | ❌ | ✅ |
3 | the-zip-built-in-function | ✅ | 👶 introduction 💪 workout 🦑 deep |
use-iteration-protocol.1: 10 | ✅ | ✅ | ❌ | ✅ |
4 | the-sum-built-in-function | ✅ | 👶 introduction 💪 workout 🦑 deep |
use-iteration-protocol.1: 10 | ✅ | ✅ | ❌ | ✅ |
5 | the-all-built-in-function | ✅ | 👶 introduction 💪 workout 🦑 deep |
❌ | ✅ | ✅ | ❌ | ❌ |
Exercises:
no | name | type | aspects | standards | done |
---|---|---|---|---|---|
1 | py-practice-functional-features | codewars | 👶 introduction 💪 workout 🦑 deep |
functional-programming-features.0: 3000 use-iteration-protocol.1: 10 |
✅ |
Game:
2. arrays-ii
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | the-map-built-in-function | ✅ | 👶 introduction 💪 workout 🦑 deep |
data-structures-uses.0: 10 data-structures-uses.1: 10 native-types-operations.3: 10 use-iteration-protocol.1: 10 |
✅ | ✅ | ❌ | ✅ |
2 | the-filter-built-in-function | ✅ | 👶 introduction 💪 workout 🦑 deep |
❌ | ✅ | ✅ | ❌ | ❌ |
3 | the-reduce-built-in-function | ✅ | 👶 introduction 💪 workout 🦑 deep |
data-structures-uses.0: 10 data-structures-uses.1: 10 native-types-operations.3: 10 use-iteration-protocol.1: 10 |
✅ | ✅ | ❌ | ✅ |
4 | the-max-built-in-function | ✅ | 👶 introduction 💪 workout 🦑 deep |
data-structures-uses.0: 10 data-structures-uses.1: 10 native-types-operations.3: 10 use-iteration-protocol.1: 10 |
✅ | ✅ | ❌ | ✅ |
5 | the-sorted-built-in-function | ✅ | 👶 introduction 💪 workout 🦑 deep |
❌ | ✅ | ✅ | ❌ | ❌ |
6 | the-sorted-built-in-function-ii | ✅ | 👶 introduction 💪 workout 🦑 deep |
❌ | ✅ | ❌ | ❌ | ❌ |
Exercises:
Game:
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | list-comprehension | ✅ | 👶 introduction 💪 workout 🦑 deep |
use-iteration-protocol.1: 10 native-types-operations.4: 10 use-comprehensions.0: 1000 use-comprehensions.2: 3000 |
✅ | ✅ | ❌ | ✅ |
2 | nested-lists-comprehension | ✅ | 👶 introduction 💪 workout 🦑 deep |
use-iteration-protocol.1: 10 native-types-operations.4: 10 |
✅ | ✅ | ❌ | ✅ |
3 | set-comprehension | ✅ | 👶 introduction | use-comprehensions.0: 1000 use-comprehensions.4: 3000 use-comprehensions.5: 3000 |
✅ | ✅ | ❌ | ✅ |
4 | dictionary-comprehension | ✅ | 👶 introduction 💪 workout 🦑 deep |
use-comprehensions.0: 1000 use-comprehensions.3: 3000 |
❌ | ❌ | ❌ | ❌ |
5 | speed-up-your-for-loop-using-map-or-list-comprehensions | ✅ | 💪 workout | use-iteration-protocol.1: 10 use-comprehensions.0: 10 use-comprehensions.4: 10 use-comprehensions.5: 10 |
✅ | ✅ | ❌ | ✅ |
Exercises:
no | name | type | aspects | standards | done |
---|---|---|---|---|---|
1 | py-practice-list-comprehension | codewars | 👶 introduction 💪 workout 🦑 deep |
use-comprehensions.0: 1000 use-comprehensions.2: 3000 |
✅ |
2 | py-practice-list-comprehension2 | codewars | 👶 introduction 💪 workout 🦑 deep |
use-comprehensions.0: 1000 use-comprehensions.1: 1000 use-comprehensions.2: 3000 |
✅ |
3 | py-practice-dictionary-comprehension | codewars | 👶 introduction 💪 workout 🦑 deep |
use-comprehensions.0: 1000 use-comprehensions.3: 3000 |
✅ |
4 | py-practice-set-comprehension | codewars | 👶 introduction 💪 workout 🦑 deep |
use-comprehensions.0: 1000 use-comprehensions.4: 3000 use-comprehensions.5: 3000 |
✅ |
Game:
4. decorators
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | what-is-a-closure | ✅ | 👶 introduction 💪 workout |
❌ | ✅ | ✅ | ❌ | ❌ |
2 | what-are-decorators | ✅ | 👶 introduction 💪 workout |
❌ | ✅ | ✅ | ❌ | ❌ |
3 | decorators-syntax | ✅ | 👶 introduction 💪 workout |
❌ | ✅ | ✅ | ❌ | ❌ |
4 | decorators-methods | ✅ | 👶 introduction 💪 workout |
❌ | ✅ | ✅ | ✅ | ❌ |
5 | functools-wraps | ✅ | 💪 workout 🦑 deep |
❌ | ✅ | ✅ | ❌ | ❌ |
Exercises:
Game:
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | what-is-functional-programming | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
2 | why-functional-programming | ✅ | 👶 introduction 🔮 obscura |
❌ | ✅ | ✅ | ❌ | ❌ |
3 | why-functional-programming-ii | ✅ | 👶 introduction 🔮 obscura |
❌ | ✅ | ❌ | ❌ | ❌ |
4 | why-functional-programming-iii | ✅ | 👶 introduction 🔮 obscura |
❌ | ✅ | ❌ | ❌ | ❌ |
5 | why-functional-programming-iv | ✅ | 👶 introduction 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
Exercises:
no | name | type | aspects | standards | done |
---|---|---|---|---|---|
1 | py-practice-functional-features2 | codewars | 👶 introduction 💪 workout 🦑 deep |
functional-programming-features.1: 3000 | ✅ |
2 | py-practice-functional-imperative | codewars | 👶 introduction 💪 workout |
contrast-functional-imperative.0: 1000 contrast-functional-imperative.1: 1000 |
✅ |
3 | py-practice-pure-functions | codewars | 💪 workout 🦑 deep |
pure-functions.1: 1000 pure-functions.2: 1000 |
✅ |
Game:
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | is-python-functional-language | ✅ | 🔮 obscura | ❌ | ✅ | ❌ | ❌ | ❌ |
2 | functions-vs-procedures | ✅ | 🔮 obscura | ❌ | ✅ | ✅ | ❌ | ❌ |
3 | functional-particularities-of-python | ✅ | 👶 introduction 🔮 obscura |
❌ | ✅ | ✅ | ❌ | ❌ |
4 | lambda-functions | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
Exercises:
Game:
7. generators
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | what-are-generators | ✅ | 👶 introduction | ❌ | ❌ | ✅ | ❌ | ❌ |
2 | yield-and-next | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
3 | recursive-generator | ✅ | 💪 workout | ❌ | ✅ | ✅ | ❌ | ❌ |
4 | generator-of-generators | ✅ | 👶 introduction 💪 workout |
❌ | ✅ | ✅ | ❌ | ❌ |
5 | benefits-of-using-generators | ✅ | 🔮 obscura | ❌ | ✅ | ✅ | ❌ | ❌ |
Exercises:
no | name | type | aspects | standards | done |
---|---|---|---|---|---|
1 | py-practice-generators | codewars | 👶 introduction 💪 workout 🦑 deep |
functional-programming-features.4: 5000 | ✅ |
2 | py-practice-pure-functions2 | codewars | 👶 introduction 💪 workout |
pure-functions.1: 1000 pure-functions.2: 1000 functional-programming-features.4: 1000 |
✅ |
Game:
8. immutability
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | what-is-immutability | ✅ | 👶 introduction 🔮 obscura |
❌ | ✅ | ✅ | ✅ | ❌ |
2 | distinguish-the-mutability-of-common-types | ✅ | 👶 introduction 🔮 obscura |
❌ | ✅ | ✅ | ❌ | ❌ |
3 | why-types-have-immutability | ✅ | 👶 introduction 🔮 obscura |
❌ | ✅ | ❌ | ❌ | ❌ |
4 | why-types-have-immutability-ii | ✅ | 👶 introduction 🔮 obscura |
❌ | ✅ | ❌ | ❌ | ❌ |
5 | avoiding-identity-mutation | ✅ | 💪 workout 🔮 obscura |
❌ | ✅ | ❌ | ❌ | ❌ |
6 | atomicity-of-failure | ✅ | 💪 workout 🔮 obscura |
❌ | ✅ | ✅ | ❌ | ❌ |
7 | immutability-gotchas | ✅ | 💪 workout | ❌ | ✅ | ✅ | ✅ | ❌ |
Exercises:
Game:
9. iterators
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | what-is-an-iterable | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
2 | what-are-iterators | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
3 | the-iteration-protocol | ✅ | 👶 introduction 💪 workout |
❌ | ✅ | ✅ | ❌ | ❌ |
4 | the-itertools-module | ✅ | 💪 workout | ❌ | ✅ | ❌ | ❌ | ❌ |
5 | the-itertools-module-ii | ✅ | 💪 workout | ❌ | ✅ | ✅ | ❌ | ❌ |
6 | iterators-applications | ✅ | 💪 workout | ❌ | ✅ | ✅ | ❌ | ❌ |
Exercises:
no | name | type | aspects | standards | done |
---|---|---|---|---|---|
1 | py-practice-functional-libraries | codewars | 👶 introduction 💪 workout |
pure-functions.1: 1000 pure-functions.2: 1000 |
✅ |
2 | py-practice-next-iter | codewars | 💪 workout 🦑 deep |
use-iteration-protocol.0: 1000 use-iteration-protocol.1: 2000 use-iteration-protocol.2: 2000 use-iteration-protocol.4: 3000 |
✅ |
Game:
✅ - At least one insight covers this
❌ - Nothing covers this
🛠️ - This standard has no objectives yet
- ❌ Distinguish between imperative and functional code
- ❌ Evaluate the suitability of a functional style of programming for a given task
- ❌ Refactor iterative code into functional code
- ❌ Analyze a function to determine whether side effects will occur
- ❌ Distinguish between pure and impure functions
- ❌ Write pure functions in Python
- ❌ Use python's library of built-in functions to transform data using the iterator protocol
- ❌ Use list and dictionary comprehensions to transform data in a functional style
- ❌ Use decorators to modularize code
- ❌ Use decorators to handle errors in a data pipeline
- ❌ Use generators to generate iterators
- ✅ Read python comprehensions and predict the result
- ❌ Read complex or nested comprehension statements and predict the result
- ❌ Use list comprehensions to iterate over and transform a list of data
- ✅ Use dictionary comprehensions to iterate over and transform a dictionary of data
- ✅ Use set comprehensions to iterate over and transform a set of data
- ✅ Use nested comprehensions to transform multidimensional data
- ❌ Recognize functional programming features not native to python
- ❌ Use a library to provide support for immutable data structures
- ❌ Use a library to provide support for Functors, such as Applicative Functors and Monads
Given the insights are tagged with aspects, we can filter over the linear content progression and create learning sub-paths.
These sub-path progressions will most likely not cover all content, but they will ensure and enforce an unified learning experience, tailor for the user wish.
For example, a user might be interested in new additions and updates of a language, rather than introduction lessions. Note that these sub-paths don't take games into consideration
If you are being introduced to the topic for the first time
Insights:
- the-slice-built-in-function
- the-reversed-built-in-function
- the-zip-built-in-function
- the-sum-built-in-function
- the-all-built-in-function
- the-map-built-in-function
- the-filter-built-in-function
- the-reduce-built-in-function
- the-max-built-in-function
- the-sorted-built-in-function
- the-sorted-built-in-function-ii
- list-comprehension
- nested-lists-comprehension
- set-comprehension
- dictionary-comprehension
- what-is-a-closure
- what-are-decorators
- decorators-syntax
- decorators-methods
- what-is-functional-programming
- why-functional-programming
- why-functional-programming-ii
- why-functional-programming-iii
- why-functional-programming-iv
- functional-particularities-of-python
- lambda-functions
- what-are-generators
- yield-and-next
- generator-of-generators
- what-is-immutability
- distinguish-the-mutability-of-common-types
- why-types-have-immutability
- why-types-have-immutability-ii
- what-is-an-iterable
- what-are-iterators
- the-iteration-protocol
Exercises:
- py-practice-functional-features
- py-practice-list-comprehension
- py-practice-list-comprehension2
- py-practice-dictionary-comprehension
- py-practice-set-comprehension
- py-practice-functional-features2
- py-practice-functional-imperative
- py-practice-generators
- py-practice-pure-functions2
- py-practice-functional-libraries
Theory put into practice/that’s how you achieve X points
Insights:
- the-slice-built-in-function
- the-reversed-built-in-function
- the-zip-built-in-function
- the-sum-built-in-function
- the-all-built-in-function
- the-map-built-in-function
- the-filter-built-in-function
- the-reduce-built-in-function
- the-max-built-in-function
- the-sorted-built-in-function
- the-sorted-built-in-function-ii
- list-comprehension
- nested-lists-comprehension
- dictionary-comprehension
- speed-up-your-for-loop-using-map-or-list-comprehensions
- what-is-a-closure
- what-are-decorators
- decorators-syntax
- decorators-methods
- functools-wraps
- recursive-generator
- generator-of-generators
- avoiding-identity-mutation
- atomicity-of-failure
- immutability-gotchas
- the-iteration-protocol
- the-itertools-module
- the-itertools-module-ii
- iterators-applications
Exercises:
- py-practice-functional-features
- py-practice-list-comprehension
- py-practice-list-comprehension2
- py-practice-dictionary-comprehension
- py-practice-set-comprehension
- py-practice-functional-features2
- py-practice-functional-imperative
- py-practice-pure-functions
- py-practice-generators
- py-practice-pure-functions2
- py-practice-functional-libraries
- py-practice-next-iter
Prerequisite knowledge consisting of 2 or more 👶/💪 workouts
Insights:
- the-slice-built-in-function
- the-reversed-built-in-function
- the-zip-built-in-function
- the-sum-built-in-function
- the-all-built-in-function
- the-map-built-in-function
- the-filter-built-in-function
- the-reduce-built-in-function
- the-max-built-in-function
- the-sorted-built-in-function
- the-sorted-built-in-function-ii
- list-comprehension
- nested-lists-comprehension
- dictionary-comprehension
- functools-wraps
Exercises:
- py-practice-functional-features
- py-practice-list-comprehension
- py-practice-list-comprehension2
- py-practice-dictionary-comprehension
- py-practice-set-comprehension
- py-practice-functional-features2
- py-practice-pure-functions
- py-practice-generators
- py-practice-next-iter
Recently added/gained traction feature
Stories, obscure details that don’t specifically relate to a learning objective
Insights:
- why-functional-programming
- why-functional-programming-ii
- why-functional-programming-iii
- why-functional-programming-iv
- is-python-functional-language
- functions-vs-procedures
- functional-particularities-of-python
- benefits-of-using-generators
- what-is-immutability
- distinguish-the-mutability-of-common-types
- why-types-have-immutability
- why-types-have-immutability-ii
- avoiding-identity-mutation
- atomicity-of-failure
✅ All content has been tagged with aspects.
Want to contribute to this wiki? Go right ahead! If it has to do with how the Enki software ecosystem works, or editorial guidelines for how to write, let us handle that. Anything else, edit away!
Curriculum Format:
- Topic Documentation
- Course Documentation
- Workout Documentation
- Insight Documentation
- Glossary Documentation
Contributor Resources:
Curriculum overview:
Topic pages: