[Python-Dev] Wishlist: dowhile

Bob Ippolito bob at redivi.com
Tue Jun 14 07:44:31 CEST 2005


On Jun 14, 2005, at 1:25 AM, Raymond Hettinger wrote:

>>>> By the way, whatever happened to "and while"?  i.e.:
>>>>
>>>>      while True:
>>>>          data = inp.read(blocksize)
>>>>      and while data:
>>>>          out.write(data)
>>>>
>>>>
>>>
>>> My favourite version of this is
>>>
>>>    while:
>>>      data = inp.read(blocksize)
>>>    gives data:
>>>      out.write(data)
>>>
>>
>> Well, we could always just make iterator factories for the common
>> cases and stuff them in itertools.  I do need to use this pattern
>> from time to time, but primarily for this exact use case, so an
>> "itertools.readby" or the like would probably solve this problem for
>> most people most of the time.
>>
>
> Doesn't work.  You still need to be able to pass through the blocksize
> argument and the target bound method.  To get what you want, there  
> would
> need to be a new method in the file API.  The reason is roughly  
> similar
> to why we have iteritems as part of the mapping API and not as a
> standalone itertool.
>
>     for data in inp.read(blocksize):
>         . . .

Reality check?

def readby(inp, blocksize=1024):
     while True:
         data = inp.read(blocksize)
         if not data:
             break
         yield data

for data in readby(inp, blocksize):
     . . .

I always thought was that iteritems is part of the mapping API and  
not as a standalone itertool because it is the *most primitive* way  
to iterate over the key/value pairs.  It is simply not implementable  
without access to the private guts of the dict.  That is simply not  
the case here.

If you need an ultra-flexible (but less obvious) implementation you  
should just use the sentinel version of the iter function as JP  
demonstrated.

-bob



More information about the Python-Dev mailing list