On Mon, 20 Jun 2022 at 11:08, Steven D'Aprano <st...@pearwood.info> wrote:

> But that's basically islice. So:
>
>     # Its okay to put reusable helper functions in a module.
>     # Not everything has to be syntax.
>     first, second, third = itertools.islice(items, 3)
>
> I think that we have a working solution for this problem; the only
> argument is whether or not that problem is common enough, or special
> enough, or the solution clunky enough, to justify a syntax solution.

I think there's a lot of people (I'm not one of them) who prefer
working with syntax rather than functions for "basic operations". Of
course, what's "basic" is up for debate, but Lucas Wiman commented
earlier "I tend to like syntax over methods for handling basic data
types", and while I don't necessarily agree, I can see how people
gravitate towards asking for syntax when built in data types are
involved.

In this case, there's also the need to explicitly state the count,
which can be inferred from the LHS when using syntax, but not in a
function call. And the (perceived or real?) performance issue with
"function calls are slow".

Ultimately, this type of proposal is mostly decided by a judgement on
"what do we want the language to look like", which attracts subjective
comments like "Python isn't Perl", or "it's a natural extension of
existing syntax", or "it's more readable". But no-one here has the
authority to declare what is or is not "Pythonic" - that authority is
with the steering council. So we do our best to reach some sort of
group consensus, and dump the hard questions on the SC (via a PEP).

My sense is that a lot more people are coming to Python these days
with an expectation that syntax-based solutions are OK, and the "old
guard" (like myself!) are pushing more for the "not everything has to
be syntax" arguments. Maybe I'm not sufficiently self-aware, and when
I was newer to Python I too liked the idea of adding syntax more. I
honestly can't remember (I did love list comprehensions when they were
added, so I clearly wasn't always against syntax!). But I do think
that the broad question of "should Python have more complex syntax" is
probably a more fundamental debate that we won't resolve here.

For the record, I think the islice solution is sufficient for this
case. But I have needed this sort of thing occasionally, and islice
didn't immediately come to mind - so I have sympathy with the
discoverability argument. If a syntax like "a, b, *... =
some_iterator" existed, I suspect I'd use it. But picking a syntax
that *didn't* mislead me into assuming the iterator was fully consumed
would be hard - I thought *... was OK, but writing it just now I
realised I had to remind myself that it didn't consume everything, to
the point where I'd probably add a comment if I was writing the code.

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/MQDFG66K4FA3TBOQ32N2WESYGLGXXQTN/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to