On Jan 9, 10:55 pm, Ben Finney <[EMAIL PROTECTED]> wrote: > erik gartz <[EMAIL PROTECTED]> writes: > > The loop performs some actions with web services. The particular > > iteration I'm on isn't important to me. It is only important that I > > attempt the web services that number of times. If I succeed I > > obviously break out of the loop and the containing function (the > > function which has the loop in it) returns True. If all attempts > > fail the containing loop returns False. > > When you have iteration requirements that don't seem to fit the > built-in types (lists, dicts, generators etc.), turn to 'itertools' > <URL:http://www.python.org/doc/lib/module-itertools> in the standard > library. > > >>> from itertools import repeat > > >>> def foo(): > ... import random > ... print "Trying ..." > ... success = random.choice([True, False]) > ... return success > ... > >>> max_attempts = 10 > >>> for foo_attempt in repeat(foo, max_attempts): > ... if foo_attempt(): > ... break > ... > Trying ... > Trying ... > Trying ... > Trying ... > Trying ... > Trying ... > >>> > > Note that this is possibly more readable than 'for foo_attempt in > [foo] * max_attempts", and is more efficient for large values of > 'max_attempts' because 'repeat' returns an iterator instead of > actually allocating the whole sequence. > > > I guess based on the replies of everyone my best bet is to leave the > > code the way it is and suck up the warning from pylint. > > I think your intent -- "repeat this operation N times" -- is better > expressed by the above code, than by keeping count of something you > don't actually care about. > > > I don't want to turn the warning off because catching unused > > variables in the general is useful to me. > > Agreed. > > -- > \ "Dyslexia means never having to say that you're ysror." | > `\ --anonymous | > _o__) | > Ben Finney
Neat! That is the best solution I've seen so far. I should definitely dig into the itertools module more often. Cheers, -Basilisk96 -- http://mail.python.org/mailman/listinfo/python-list