On 23 November 2017 at 13:45, Paul Moore <p.f.mo...@gmail.com> wrote:
> On 23 November 2017 at 12:28, Ivan Levkivskyi <levkivs...@gmail.com> > wrote: > > On 23 November 2017 at 13:11, Paul Moore <p.f.mo...@gmail.com> wrote: > >> > >> On 23 November 2017 at 12:01, Ivan Levkivskyi <levkivs...@gmail.com> > >> wrote: > >> > >> > "I don't use it, therefore it is not needed" is a great argument, > >> > thanks. > >> > Lets just forget about two SO questions and dozens people who up-voted > >> > it. > >> > Do you use async comprehensions? If not, then we don't need them > either. > >> > >> For those of us trying to keep up with the discussion who don't have > >> time to chase the various references, and in the interest of keeping > >> the discussion in one place, can you summarise the real-world use > >> cases from the SO questions here? (I assume they are real world cases, > >> and not just theoretical questions) > [...] > > > > My understanding is that none of the case is _pressing_, since they all > > start with a for-loop, but > > following this logic comprehensions themselves are not needed. > Nevertheless > > people use them because they like it. > > The problem in all four cases is that they got hard to debug problem, > since > > calling `f()` returns a generator, > > just not the one they would expect. > > OK, thanks. I can see why someone would want to do this. However, it > seems to me that the problem (a hard to debug error) could be solved > by disallowing yield in comprehensions and generator expressions > (giving an *easy* to debug error). I don't think the above is a > compelling argument that we have to support the one-line form. If > there was a non-trivial body of actual user code that uses the loop > form, which would be substantially improved by being able to use > comprehensions, that would be different. To put it another way, the > example you gave is still artificial. The second link is a real use > case, but as you say seems to be more a question about "why did this > not work as I expected" which could be solved with a SyntaxError > saying "yield expression not allowed in comprehensions". > The level of "artificialness" is quite subjective, this is rather matter of taste (see the tornado example). Let us forget for a moment about other problems and focus on this one: list comprehension is currently not equivalent to a for-loop. There are two options: - Fix this, i.e. make comprehension equivalent to a for-loop even in edge cases (Serhiy seems ready to do this) - Prohibit all cases when they are not equivalent I still prefer option one. But I see your point, option two is also an acceptable fix. Note that there were not so many situations when some code became SyntaxError later. I don't see why this particular case qualifies for such a radical measure as an exception to syntactic rules, instead of just fixing it (sorry Nick :-) -- Ivan
_______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com