Movatterモバイル変換
[0]ホーム
[Python-Dev] Tricky way of of creating a generator via a comprehension expression
Ivan Levkivskyilevkivskyi at gmail.com
Wed Nov 22 11:38:11 EST 2017
On 22 November 2017 at 17:16, Paul Moore <p.f.moore at gmail.com> wrote:> On 22 November 2017 at 16:08, Ivan Levkivskyi <levkivskyi at gmail.com>> wrote:> > On 22 November 2017 at 16:56, Yury Selivanov <yselivanov.ml at gmail.com>> > wrote:> >>> >> On Wed, Nov 22, 2017 at 10:10 AM, Ivan Levkivskyi <levkivskyi at gmail.com> >> >> wrote:> >> > On 22 November 2017 at 15:47, Paul Moore <p.f.moore at gmail.com> wrote:> >> [...]> >> I'm all for prohibiting using 'yield' expression in generator> >> expressions or comprehensions. The semantics is way to hard to> >> understand and hence be of any value.> >>> >> Making 'await' a SyntaxError is absolutely not an option. Async> >> generator expressions are a shorthand syntax for defining asynchronous> >> generators (PEP 525), and it's already being used in the wild.> >> >> > OK, makes sense, so it looks like we may have the following plan:> >> > - fix `yield` in comprehensions>> I'm still not clear what "fix" would actually mean, but you propose> clarifying the docs below, so I assume it means "according to whatever> the updated docs say"...>>I mean the initial proposal: make comprehensions equivalent to a for-loop> > - update PEP 530 and docs re generator expressions vs comprehensions>> Docs more importantly than PEP IMO. And are you implying that there's> a difference between generator expressions and comprehensions? I> thought both were intended to behave as if expanded to a function> containing nested for loops? Nothing said in this thread so far (about> semantics, as opposed to about current behaviour) implies there's a> deliberate difference.>I think there may be a difference:comprehension `g = [(yield i) for i in range(3)]` is defined as this code: __result = [] __i = None try: for __i in range(3): __result.append(yield __i) g = __result finally: del __result, __iwhile `g = list((yield i) for i in range(3))` is defined as this code: def __gen(): for i in range(3): yield (yield i) g = list(__gen()) Although these two definitions are equivalent in simple cases (like having`f(i)` instead of `yield i`)But this is debatable, I think before we move to other points we need toagree on the clear definitions of semantics of generator expressions andcomprehensions.--Ivan-------------- next part --------------An HTML attachment was scrubbed...URL: <http://mail.python.org/pipermail/python-dev/attachments/20171122/8b2e865a/attachment.html>
More information about the Python-Devmailing list
[8]ページ先頭