In this chapter, we explored the concept of iteration and generation a bit more deeply. We saw the map
, zip
and filter
functions quite in detail, and how to use them as an alternative to a regular for
loop approach.
Then we saw the concept of comprehensions, for lists, dictionaries, and sets. We saw their syntax and how to use them as an alternative to both the classic for
loop approach and also to the use of map
, zip
, and filter
functions.
Finally, we talked about the concept of generation, in two forms: generator functions and expressions. We learned how to save time and space by using generation techniques and saw how they can make possible what wouldn't normally be if we used a conventional approach based on lists.
We talked about performances, and saw that for
loops are last in terms of speed, but they provide the best readability and flexibility to change. On the other hand, functions such as map
and filter
can be much faster, and comprehensions may be even better.
The complexity of the code written using these techniques grows exponentially so, in order to favor readability and ease of maintainability, we still need to use the classic for
loop approach at times. Another difference is in the name localization, where the for
loop behaves differently from all other types of comprehensions.
The next chapter will be all about objects and classes. Structurally similar to this one, in that we won't explore many different subjects, rather, just a few of them, but we'll try to dive a little bit more deeply.
Make sure you understand well the concepts of this chapter before jumping to the next one. We're building a wall brick by brick, and if the foundation is not solid, we won't get very far.