This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: stdlib generator-like iterators don't forward send/throw
Type: enhancement Stage: resolved
Components: Library (Lib) Versions: Python 3.4
process
Status: closed Resolution: later
Dependencies: Superseder: Implement generator interface in itertools.chain.
View: 16150
Assigned To: Nosy List: rhettinger, serhiy.storchaka, twouters
Priority: low Keywords: patch

Created on 2013-03-15 22:37 by twouters, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
islice_send.diff twouters, 2013-03-19 00:52 review
Messages (3)
msg184273 - (view) Author: Thomas Wouters (twouters) * (Python committer) Date: 2013-03-15 22:37
In response to a question asked at Brett Cannon's Python 3.3 talk at PyCon, it occurs to me the iterators in the itertools module should participate in generator sending, so that you can do this:

def report_first_ten(g):
    s = itertools.islice(g, 10)
    yield from s
    print("First 10 done.")
    yield from g

and then send (or throw) into the report_first_ten() generator, it fails (because itertools.islice() has no send method.) Similarly, perhaps itertools.izip() should gain a send method that sends into the iterators it's zipping, etc.
msg184572 - (view) Author: Thomas Wouters (twouters) * (Python committer) Date: 2013-03-19 00:52
After writing a simplistic implementation of this for itertools.islice, I'm not sure if this is actually useful. While it's nice for symmetry, I have a hard time imagining how to use it -- so I can't write tests for the new feature, and it may not be a useful thing to have.

Also, there are some design decision to be made, like what to do with an islice that needs to skip items. (The prototype just sends them None instead, which may or may not be appropriate for the hypothetical eventual usecase.) Tulip certainly won't be needing this kind of thing, as it doesn't fit the way it uses generators at all. It may be useful for generaors that are used as pipelines, but without an actual code example it's hard to say.

I'm attaching the preliminary send/throw methods for islice, but setting resolution to 'later' until someone comes up with a usecase.
msg184608 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2013-03-19 07:10
This was proposed before (see issue16150) and was rejected after discussing on Python-ideas.
History
Date User Action Args
2022-04-11 14:57:42adminsetgithub: 61635
2013-03-28 01:02:27terry.reedysetstatus: open -> closed
superseder: Implement generator interface in itertools.chain.
stage: resolved
2013-03-19 07:12:26serhiy.storchakasetnosy: + rhettinger
type: enhancement
2013-03-19 07:10:50serhiy.storchakasetnosy: + serhiy.storchaka
messages: + msg184608
2013-03-19 00:52:27twouterssetfiles: + islice_send.diff
priority: normal -> low
messages: + msg184572

keywords: + patch
resolution: later
2013-03-15 22:37:48twouterscreate