Does anyone else use this little idiom?
Steve Holden
steve at holdenweb.com
Sun Feb 3 07:18:25 EST 2008
Jeff Schwab wrote:
> How miller.paul.w at gmail.com wrote:
>> Ruby has a neat little convenience when writing loops where you don't
>> care about the loop index: you just do n.times do { ... some
>> code ... } where n is an integer representing how many times you want
>> to execute "some code."
>>
>> In Python, the direct translation of this is a for loop. When the
>> index doesn't matter to me, I tend to write it as:
>>
>> for _ in xrange (1,n):
>> some code
>>
>> An alternative way of indicating that you don't care about the loop
>> index would be
>>
>> for dummy in xrange (1,n):
>> some code
>>
>> But I like using _ because it's only 1 character and communicates well
>> the idea "I don't care about this variable."
>>
>> The only potential disadvantages I can see are threefold:
>>
>> 1. It might be a little jarring to people not used to it. I do admit
>> it looks pretty strange at first.
>>
>> 2. The variable _ has special meaning at the interactive interpreter
>> prompt. There may be some confusion because of this.
>>
>> 5. Five is right out. (ob Holy Grail reference, of course. :-)
>>
>> So, I guess I'm wondering if anyone else uses a similar idiom and if
>> there are any downsides to it that I'm not aw
>
> Would something like this be acceptable? It still requires a loop
> variable, plus an extra line of code per loop, plus a one-time class
> definition (and import into each client module), and it's probably
> slower than "for dummy in range." The syntax might be more inuitive
> than "dummy" or "_" in a for loop, though.
>
> class Go:
> def __init__(self, count):
> self.count = count
>
> def again(self):
> if self.count <= 0:
> return False
> self.count -= 1
> return True
>
> go = Go(3)
> while go.again():
> print "hello"
One could rename the again() method __call__(), allowing the even more
horrible but less verbose
while Go(3)():
print "hello"
That'd confuse the newbies!
regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC http://www.holdenweb.com/
More information about the Python-list
mailing list