> On 09/06/2022 09:50, Paul Moore wrote: > > On Thu, 9 Jun 2022 at 01:12, Steve Jorgensen <ste...@stevej.name> wrote: > >> My current thinking in response to that is that using islice is a decent > >> solution except that it's not obvious. You have to jump outside of the > >> thinking about the destructuring capability and consider what else could > >> be used to help. Probably, first thing that _would_ come to mind from > >> outside would be slicing with square brackets, but that would restrict the > >> solution to only work with sequences and not other iterables and > >> iterators as islice does. > >> > >> That brings up a tangential idea. Why not allow square-bracket indexing of > >> generators instead of having to import and utilize islice for that? > > Because generators don't have a common (sub-)type, so there's no class > > to put the relevant __getitem__ method on. > > > > > How so? > > >>> def mygen(): yield 42 > ... > >>> type(mygen()) > <class 'generator'>
Sorry, I was assuming the request was for slicing to work for iterables, not generators. But do we really want to make slicing work for generators, but still fail for other iterators? That seems like it'll just cause confusion. Take the OP's original example: with open("some.file") as f: for line in f[:10]: # This fails because f isn't a generator with open("some.file") as f: for line in (l for l in f)[:10]: # This does work because we're slicing a generator You're bound to get someone (possibly even the OP!!!) asking for the first version to "just work"... Also, "obvious" cases like # How we would do this currently def get_first_3_current(i): return list(itertools.islice(i, 3)) # How someone might assume we could do this with the new indexing def get_first_3(i): return list(i[:3]) get_first_3(range(10)) get_first_3({1,2,3,4}) get_first_3({"a": "one", "b": "two", "c": "three"}) won't work, and no amount of adding iter() will make them work. Paul _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/EN2AEJKZKZRWSNDMAROCII4OP4ZCA57C/ Code of Conduct: http://python.org/psf/codeofconduct/