On Mon, Dec 8, 2014 at 11:12 AM, Roy Smith <r...@panix.com> wrote: > Ugh. When I see "while foo", my brain says, "OK, you're about to see a > loop which is controlled by the value of foo being changed inside the > loop". That's not at all what's happening here, so my brain runs into a > wall.
I agree, with the caveat that this kind of thing makes a fine infinite loop: while "No exception raised": # do stuff that can raise an exception while "Playing more games": play_game() if not still_playing: break reset_game_board() Nobody expects a string literal to actually become false inside the loop. With a local name, yes, I would expect it to at least have a chance of becoming false. > Next problem, what the heck is "res"? We're not back in the punch-card > days. We don't have to abbreviate variable names to save columns. > Variable names are supposed to describe what they hold, and thus help > you understand the code. I have no idea what "res" is supposed to be. > Residue? Result? Rest_of_items? Response? None of these make much > sense here, so I'm just left befuddled. I take it as "result", which makes plenty of sense to me. It's the thing that's about to be yielded. Given that there's not much else you can say in a meta-function like zip(), I have no problem with that. Here's a slightly different example: def mark_last(it): it = iter(it) lastres = sentinel = object() while "more values coming": res = next(it, sentinel) if lastres is not sentinel: yield (lastres, res is sentinel) if res is sentinel: return lastres = res Use of "res" for "result" and "lastres" to mean "res as of the previous iteration of the loop" seems fine to me. ChrisA -- https://mail.python.org/mailman/listinfo/python-list