On 25 March 2018 at 22:44, Christoph Groth <christ...@grothesque.org> wrote: > I think that it's a helpful guideline to imagine what the ideal behavior > should be if we were not constrained by backwards compatibility, and > then try to follow it. In the case at hand, we all seem to agree that > the fact that the outermost iterator of a comprehension is evaluated in > the surrounding scope is somewhat of a wart, although one that is rarely > visible.
There's no such agreement, since generator expressions have worked that way since they were first introduced almost 15 years ago: https://www.python.org/dev/peps/pep-0289/#the-details It's much easier to see the difference with generator expressions, since the evaluation of the loop body is delayed until the generator is iterated over, while the evaluation of the outermost iterator is immediate (so that any exceptions are more easily traced to the code responsible for them, and so that they don't need to create a closure in the typical case). With comprehensions, the entire nested scope gets evaluated eagerly, so it's harder to detect that there's a difference in the evaluation scope of the outermost iterator in normal use. That difference *does* exist though, and we're not going to tie ourselves into knots to try to hide it (since the exact same discrepancy will necessarily exist for generator expressions, and semantic consistency between genexps and the corresponding comprehensions is highly desirable). Cheers, Nick. -- Nick Coghlan | ncogh...@gmail.com | Brisbane, Australia _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/