New submission from Terry J. Reedy:

https://docs.python.org/3/reference/expressions.html#yield-expressions says
  "When yield from <expr> is used, it treats the supplied expression
  as a subiterator. All values produced by that subiterator ...".
To me "treats..expression as a subiterator" means that the expression must *be* 
an iterator, such as returned by iter or calling a generator function.  Hence I 
was surprised upon reading "yield from <non-iterator iterable>" in stdlib code.

I confirmed that this usage is correct by trying

>>> def g():
        yield from (1,2)

>>> i = g()
>>> next(i), next(i)
(1, 2)

and then reading the PEP380 Formal Semantics, which begins with "_i = 
iter(EXPR)".  Hence I suggest the following replacement for the quote above:
  "When yield from <expr> is used, the expression must be an iterable.
  A subiterator is obtained with iter(<expr>).  All values produced
  by that subiterator ...".

Note that 'subiterator' is spelled in the following sentences 'underlying 
iterable' (which I am not sure I like) and 'sub-iterator' (and 
'sub-generator').  I think we should  be consistent for at least the two short 
'yield from' paragraphs.

----------
assignee: docs@python
components: Documentation
messages: 271577
nosy: docs@python, terry.reedy
priority: normal
severity: normal
stage: patch review
status: open
title: yield from expression can be any iterable
type: behavior
versions: Python 3.5, Python 3.6

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue27646>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to