[Steven D'Aprano <st...@pearwood.info>]
> It wasn't :-) but we're talking about adding a function to **itertools**
> not "container tools", one which will behave subtly different with
> containers and iterators. Your use-case ("first item in a container") is
> not the same as the semantics "next element of an iterator", even if we
> call the second one "first".

All itertools functions accept arbitrary iterables, which includes all
iterators of all kinds, and includes everything else `iter()` can be
applied to (such as most containers).

`first()` would be exactly the same as all other itertools functions
in this respect.

Yes, you _can_ make mistakes because of it.  That gets a yawn from me.
It's nothing new, and comes with the territory of Python being a
multi-paradigm language.

...

>> While the meaning of `first()` is clear for any iterable argument.

> Sorry Tim, I have to disagree. The meaning of `first` is:
>
>     return the first element of a sequence or container (in standard
>     iteration order), OR the *next* element of an iterator

As I said, the meaning _is_ clear to you.

> and I don't think that this is even a little bit clear from the name.

I didn't claim it was clear from the name alone.  As always, what I
care about is whether the name is sufficient to remind users of the
meaning _after_ they've learned what it means.  For a non-empty
iterable `it`,

a = first(it)

is the same as:

    for a in it:
        break

Once that's grasped, it's essentially impossible to forget what
`first()` means (it's simply the first value returned from iterating
over `it`).
_______________________________________________
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/VHDYIDZ6EELSETVNXZKYISFHKVNU2K36/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to