On Sat, May 9, 2020 at 9:41 PM Christopher Barker <python...@gmail.com> wrote:
> Funny you should bring this up. > > I've been meaning, for literally years, to propose not quite this, but > adding a "slice iterator" to the sequence protocol. > > (though note that one alternative is adding slice syntax to > itertools.islice) > > I even got so far as to write a draft PEP and prototype. > > NOTE: I'm not saying this is ready for a PEP, but it was helpful to use > the format to collect my thoughts. > > https://github.com/PythonCHB/islice-pep/blob/master/pep-xxx-islice.rst > > And the prototype implementation: > > https://github.com/PythonCHB/islice-pep/blob/master/islice.py > I think this is a good idea. For sequences I'm not sure how big the benefit is - I get that it's more efficient, but I rarely care that much, because most lists are small. Why not extend the proposal to all iterators, or at least common ones like generators? That would allow avoiding itertools when I have no other choice. You write "This PEP proposes that the sequence protocol be extended". What does that mean exactly? I assume you don't want to magically add an `islice` property to every class that has `__len__` and `__getitem__`. Will you just add it to `collections.abc.Sequence`, the builtins, and the stdlib? Perhaps this could come with some new syntax? My first thought was `iterator(1:2)`, the idea being that changing the brackets would give it lazy iterator feel the same way that changing the brackets on a list comprehension turns it into a generator. But it probably looks too much like a function call. So maybe we can play with double brackets instead: ``` import itertools for (l1, r1), (l2, r2) in itertools.product('() {} []'.split(), repeat=2): print(f'sequence{l1}{l2}1:2{r2}{r1}') sequence((1:2)) sequence({1:2}) sequence([1:2]) sequence{(1:2)} sequence{{1:2}} sequence{[1:2]} sequence[(1:2)] sequence[{1:2}] sequence[[1:2]] ```
_______________________________________________ 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/PV37ISIBDZ63YF44FIBWCFC4XESOA6PL/ Code of Conduct: http://python.org/psf/codeofconduct/