I&#x27;m coding exclusively in python3, and I agree the &quot;least small&quot; changes from python2 made it cleaner BUT<p>&gt; I&#x27;m also a fan of map and filter returning generators rather than being hard-coded to a list implementation<p>I find myself often having to wrap expressions in list(...) to force the lists. (which is <i>annoying</i>)<p>Generators make things much more complicated. They are basically a way to make (interacting, by means of side-effects) coroutines, which are difficult to control. In most use cases (scripting) lists are much easier to use (no interleaving of side effects) and there is plenty of memory available to force them.<p>Generators also go against the &quot;explicit is better than implicit&quot; mantra. It&#x27;s hard to tell them apart from lists. And often it&#x27;s just not clear if the code at hand works for lists, or generators, or both.<p>So IMHO generators by default is a bad choice.<p>&gt; stream fusion is a good thing<p>I don&#x27;t think generators qualify for &quot;stream fusion&quot;. I think stream fusion is a notion from compiled languages like Haskell where multiple individual per-item actions can be compiled and optimized to a combined action. Python instead, I guess, just interleaves actions, which might even be less efficient for complicated actions.