We looked at several high-level constructs that allow you to describe all sorts of collections and infinite data streams.
It is safe to say that these constructions are a language within a language. High-level constructs may be incomprehensible to novice Python programmers, but their expressive power can tell you about many things briefly.
Generation with yield
is more like regular imperative Python, but using this style forces you to interpret the code in your head. This interpretation is more challenging than reading regular imperative code. This difficulty stems from the fact that with imperative code, you don't have to figure out how to suspend a function or traverse the function body several times.