"KY" == Ka-Ping Yee firstname.lastname@example.org writes:
KY> It's just not the way i expect for-loops to work. Perhaps we KY> would need to survey people for objective data, but i feel KY> that most people would be surprised if
| for x in y: print x | for x in y: print x
KY> did not print the same thing twice, or if
As with many things Pythonic, it all depends. Specifically, I think it depends on the type of y. Certainly in a pre-iterator world there was little preventing (or encouraging?) you to write y's __getitem__() non-destructively, so I don't see much difference if y is an iterator.
KY> Even if it's okay for for-loops to destroy their arguments, i KY> still think it sets up a bad situation: we may end up with KY> functions manipulating sequence-like things all over, but it KY> becomes unclear whether they destroy their arguments or not. KY> It becomes possible to write a function which sometimes KY> destroys its argument and sometimes doesn't. Bugs get deeper KY> and harder to find.
How is that different than pre-iterators with __getitem__()?
KY> I'm assigning properties to "for" that you aren't. I think KY> they are useful properties, though, and worth considering.
These aren't properties of for-loops, they are properties of the things you're iterating (little-i) over.