On Fri, May 11, 2018 at 9:15 PM, Nick Coghlan <ncogh...@gmail.com> wrote: > * *maybe* discover that even the above expansion isn't quite accurate, and > that the underlying semantic equivalent is actually this (one way to > discover this by accident is to have a name error in the outermost iterable > expression): > > def _genexp(_outermost_iter): > for x in _outermost_iter: > yield x > > _result = _genexp(_outermost_iter) > > * and then realise that the optimised list comprehension form is essentially > this: > > def _listcomp(_outermost_iter): > result = [] > for x in _outermost_iter: > result.append(x) > return result > > _result = _listcomp(data) > > Now that "yield" in comprehensions has been prohibited, you've learned all > the edge cases at that point
Not quite! You missed one, just because comprehensions aren't weird enough yet. AFAIK you can't tell with the list comp, but with the genexp you can (by not iterating over it). > def _genexp(_outermost_iter): > for x in _outermost_iter: > yield x > > _result = _genexp(data) It's actually this: def _genexp(_outermost_iter): for x in _outermost_iter: yield x _result = _genexp(iter(_outermost_iter)) I don't think there's anything in the main documentation that actually says this, although PEP 289 mentions it in the detaily bits. [1] ChrisA [1] https://www.python.org/dev/peps/pep-0289/#the-details _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/