On Sat, May 9, 2020 at 1:58 PM Alex Hall <alex.moj...@gmail.com> wrote:

>  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?
>

Because the slice syntax, so far at least, only applies to Sequences. And
in general, you can't use the full slice syntax on iterators anyway (they
don't have a length).

and well, iterators are already iterators ... so there isn't an "extend the
proposal" here at all.

But without thinking about i much, I'm not sure adding slice syntax to
iterators in general makes sense -- slicing is quite connected to indexing,
which iterators don't support.

> That would allow avoiding itertools when I have no other choice.

reading the thread on adding "strict" to zipk I'd say "avoiding itertools"
is not really a goal of most folks :-)

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?
>

Details to be worked out. As Python as evolved over the years from
protocols, to ABC, and it's not fully clear yet, even then, probably, yes
"add it to `collections.abc.Sequence`, the builtins, and the stdlib?

I"m not sure every class that has __len__ and __getitem__ could Magically
grow an new method, and I sure wouldn't want them to. In fact, in theory,
you'd want every class that supports slicing to grow this functionality,
but I don't know there is any way to know whether a class, in general,
supports slicing.

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.
>

doesn't just look like one -- it would clash. Remember that "iterable" and
"ioterator" is a protocol -- anything can support it. That would make it
impossible to have a callable be an iterator


> So maybe we can play with double brackets instead:
>

What would this new syntax do, regardless of what it was? I"m not sure I
follow. My idea is about creating a view iterable on sequences, I'm not
sure what view iterable on an iterable would be?

-CHB


-- 
Christopher Barker, PhD

Python Language Consulting
  - Teaching
  - Scientific Software Development
  - Desktop GUI and Web Development
  - wxPython, numpy, scipy, Cython
_______________________________________________
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/6CEBGVDDZIYCIWA2QCBH3G3N3IUFIEBP/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to