On Sat, Dec 14, 2019 at 2:50 AM Stephen J. Turnbull <
turnbull.stephen...@u.tsukuba.ac.jp> wrote:

> Did you intend to reply only to me?


Nope - I hate list that don’t default to replying to the list (I know
that’s an unpopular opinion).

I was wondering why no one comment on it.

 > I’m quite convinced that first() would NOT cause any particular
>  > confusion, neither for sets nor iterators.
>
> I don't see how you make that judgment so confidently, since you don't
> claim experience with `first`, only the educationally problematic
> `next(iter())`.


Well, that’s why I said *I’m* convinced, rather than state it as a general
truism.

I have a lot of experience with newbies, so I think I have a pretty good
idea what tends to trip them up. I could be wrong of course, but without
actually introducing it using it in and a couple of years worth of
teaching, we’ll never know for sure :-)

I don't agree.  I can't speak for others, but once I understood the
> difference between "iterable" and "iterator", "next(iter(iterable))"
> was self-explanatory when I first encountered it.


Sure — but the newbies I’m talking about don’t yet understand the
difference between "iterable" and "iterator", and many people get very far
before they do.

I *think* the primary target audience for first() would be those folks, so
it’s kind of ironic that we’re concerned about confusing them.

> I don't see how you

> explain all that in terms of first() without the concept of iter(),
> and the detail that (iter(iterator)) == iterator.


I don’t think you need to — that’s my whole point. In common code, folks
rarely work with bare iterators (usually they are implicitly created in a
for loop, for instance), so that distinction doesn’t come up.

And when it *does* come up, it applies to every use of the iteration
protocol: for loops, next, etc. so nothing special about first()

I think I made that point already, probably in a note sent to only one
person by mistake.

Of the top of my head, I can’t think of a single non-contrived example of
using a bare iterator in case that is not specifically doing something
“special”.

Can anyone else?

Sure, you can
> *tell* students that's how first() works, but how do they apply it in
> their own code?


You tell them that can use it to get the first item out of a container or
other iterable. And you’re done.

Some time in the future, they may encounter a bare iterator, and surprised
that first() consumes an item. But as I said before, they’ll have other
issues as well, and will need to learn about iterators then.

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

Reply via email to