On Saturday, June 4, 2016 at 11:37:18 PM UTC+12, Ned Batchelder wrote:
> On Friday, June 3, 2016 at 11:43:33 PM UTC-4, Lawrence D’Oliveiro wrote:
> > On Saturday, June 4, 2016 at 3:00:36 PM UTC+12, Steven D'Aprano wrote:
> > > You can exit a loop because you have run out of items to process, or you 
> > > can
> > > exit the loop because a certain condition has been met.
> > 
> > But why should they be expressed differently?
> > 
> >     item_iter = iter(items)
> >     while True :
> >         item = next(item_iter, None)
> >         if item == None :
> >             break
> >         if is_what_i_want(item) :
> >             break
> >     #end while
> 
> Do you actually write loops like this?

Is that a non-trolling question? Yes. All the time.

> If this appeared in a code review, first we'd have a conversation about
> what this code was meant to do ...

I would hope not.

> ...and then I would ask, "Why aren't you using a for loop?"

... and then I would ask, “Didn’t you read my previous postings where I pointed 
out the issues with them?”

Here <https://en.wikibooks.org/wiki/Python_Programming/Databases> is another 
example: see the section “Looping on Field Breaks”. A while-True scales 
gracefully to complex situations like that. I much prefer universal, adaptable 
constructs, rather than having to remember different solutions for special 
cases.

> I suspect most Python programmers would be similarly confused about
> why you aren't using one of the central constructs of the language.

When a language has good and bad parts, it behooves the wise programmer to 
concentrate on the good parts and try to ignore the bad.

Python’s for-loops have their uses—I *did* point this out too, did you not 
notice?—but they are best confined to the situations that they are good at.

> What's next? "Why have both if and while? A goto will work for both!"

Passive-aggression aside, funny you should mention that. I use a goto-free 
structured-programming style in my C code, as exemplified here 
<https://github.com/ldo/dvd_menu_animator/blob/master/spuhelper.c>. I find it 
reduces problems with forgetting to free memory, or freeing it twice.
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to