On 2006-10-10, Paul Rubin <http> wrote: > "Fredrik Lundh" <[EMAIL PROTECTED]> writes: >> or for the perhaps-overly-clever hackers, >> >> for x in iter(lambda: foo() or None, None): >> process(x) > > for x in takewhile(bool, (foo() for _ in repeat(None))): > process(x) > > Meh, both are ugly.
Sure, but so is IMO the current pythonic idiom. Suppose one has the following intention in mind: while x = setup(): if y = pre_process() in ErrorCondition: break post_process(y) else: NormalTermination() The pythonic idiom for this case would then be something like: while 1: x = setup() if x: NormalTermination() break y = pre_process(x) if y in ErrorCondition: break post_process(y) There was some time it seemed PEP: 315 would be implemented so that this could have been written as: do: x = setup() while x: y = pre_process(x) if y in ErrorCondition: break post_process(y) else: NormalTermination() Which IMO would have been clearer. Alas PEP 315 is deffered so it will be probably a long time before this will be implemented. -- http://mail.python.org/mailman/listinfo/python-list