[Python-Dev] Tricky way of of creating a generator via a comprehension expression
Antoine Pitrou
solipsis at pitrou.net
Sat Nov 25 11:02:52 EST 2017
At this point, the fact that several Python core developers fail to
understand the pieces of code presented as examples should be a hint
that the syntax here is far from desirable...
Regards
Antoine.
On Sat, 25 Nov 2017 15:47:14 +0000
Paul Moore <p.f.moore at gmail.com> wrote:
> On 25 November 2017 at 14:55, Ivan Levkivskyi <levkivskyi at gmail.com> wrote:
> > Continuing the topic of the ban, what exactly should be banned? For example
> > will this still be valid?
> >
> > def pack_two():
> > return [(yield), (yield)] # Just a list display
> >
> > I don't see how this is controversial. It is clear that `pack_two` is a
> > generator.
>
> It's not clear to me...
>
> Seriously, I wouldn't know what this would do. Presumably it needs
> someone calling send() to generate results (because that's now yield
> expressions work) but beyond that, I don't really understand what it
> does. Maybe an example that wasn't artificial would be more obvious,
> I'm not sure.
>
> > If this is going to be prohibited, then one may be surprised by lack of
> > referential transparency, since this will be valid:
> >
> > def pack_two():
> > first = (yield)
> > second = (yield)
> > return [first, second]
>
> The fact that you can't inline first and second doesn't bother me. I
> can't fully explain why, but it doesn't. (Technically, I *can* explain
> why, but you'd disagree with my explanation :-))
>
> > If the first example will be allowed, then one will be surprised why it
> > can't be rewritten as
> >
> > def pack_two():
> > return [(yield) for _ in range(2)]
> >
> > I have found several other examples where it is not clear whether they
> > should be prohibited with `yield` or not.
>
> So far, none of your examples have demonstrated anything that Guido's
> suggestion to ban yield would make confusing *to me*.
>
> Maybe this demonstrates nothing more than how inconsistent and shallow
> my understanding of yield expressions is. That's fine, I can live with
> that. I can't give you any assurances that my level of understanding
> is common among non-experts, but I will say that in my view, Guido's
> proposal feels sensible and intuitive. And after all, if the use of
> yield expressions becomes significantly more common, and the general
> level of familiarity with the concept increases, it's easy enough to
> relax the restriction later, in line with the average user's level of
> comfort.
>
> Paul
More information about the Python-Dev
mailing list