[Tim]
>> BTW, you can go a long way in Python without knowing anything about `iter()`
>> or `next()`.  But not without mastering `for` loops.  That's why I prefer to
>> say that, for ordinary cases,
>>
>>     a = first(it)
>>
>> has the same effect as:
>>
>>     for a in it:
>>         break

[Andrew Barnert]
> I just had to explain to someone today that a loop like this doesn’t just use 
> up
> and throw away a value from it, but leaves a bound to that first value.
>
> Admittedly, this wasn't a novice, but a pretty experienced C++ and Java 
> developer
> who doesn’t do much Python, who just didn’t know that Python scopes are 
> functions
> rather than all compound statements. That’s not a confusion a novice would 
> have.
>
> But would a novice actually get that it is usefully assigning the first thing 
> in it to a?
> It seems obvious to me, but I’m not sure it would to most people who don’t 
> know
> enough Python to know about iter.

I couldn't care less whether things are "obvious" at first - unless
they're Dutch ;-)  Nothing about programming is obvious at first.
What I do care about is explanations that "stick" _after_ someone
makes the effort to learn them.

> For that matter, even if they do know this leaves a bound to something
> useful, do they know what it does with a set? If not, what have we solved 
> here?

You seriously want to claim that it's A Mystery to people what
iterating over a set does?  That even a newbie would be baffled by the
output of:

    for a in {1, 2, 3}:
        print(a)

?  They may indeed be baffled by the _order_ in which 1, 2, and 3 are
printed, but not in the slightest by that exactly those 3 values _are_
printed.

> And do we even really need to solve this problem How many novices are
> going to be confused about what first does with a set, and need to know
> the answer?

My original statement was "you can go a long way in Python without
knowing anything about `iter()` or `next()`, which goes far beyond
novices.  I didn't even mention newbies.

> Plus, if first really has to be this completely understandable to people who 
> don’t
> know about iter, how can we put it in itertools, a module whose docs start off
> with a nice friendly introduction about the building blocks of an algebra for
> iterators that you can compose into powerful tools?

As above, I didn't really have newbies in mind.  I did have the
learning curve all Python programmers need to climb in mind.  `next()`
and `iter()` didn't even exist in earlier versions of Python, yet we
somehow managed ;-)  They've _become_ basic to explaining how (among
other things) `for` is _implemented_ now, but it's easy to play with
`for` all by itself to figure out how `for` works.

And I can't imagine a Python course that even mentioned `iter()` or
`next()` before covering `for`.

I also said  "next(iter(it))" should also be given as a more succinct
explanation for "advanced" users - but _expect_ that the "for"
explanation would be more accessible to more users.

Why are you so irked at an attempt to give "the simplest explanation
that could possibly work"?
_______________________________________________
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/XSI5Q5BEZYOCRDR3CENN5S7VVBQBJ45C/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to