gdbm objects not iterable?
Steve Holden
steve at holdenweb.com
Wed Oct 3 10:08:53 EDT 2007
Laszlo Nagy wrote:
> Hi All,
>
> gdbm objects have a "firstkey" and a "nextkey" method. So if I want
> iterate through the keys (which I often do) then I have to do this:
>
> def itergdbmkeys(gdbm_obj):
> key = gdbm_obj.firstkey()
> if key is None:
> raise StopIteration
> yield key
> while True:
> key = gdbm_obj.nextkey(key)
> if key is None:
> raise StopIteration
> yield key
>
> Then I can do this:
>
> for key in itergdbmkeys(gdbm_obj):
> process(key,gdbm_obj)
>
> I wonder why we do not have a "next()" method, which could return an
> iterator instantly. I don't think that it would be harmful, but
> definitely it would be useful. Then we could do this:
>
> for key in gdbm_obj:
> process(key,obj)
>
> I know that this is a very small change, but it can make gdbm objects
> look more like dictionaries.
>
> Please make comments. :-)
>
What you would need is a method to *create and return* a generator, and
it's the generator that should have the next() method. Otherwise you
can't have two independent iterations over the same gdbm object (and you
don't have a way of ensuring iteration starts at the beginning).
regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://del.icio.us/steve.holden
Sorry, the dog ate my .sigline
More information about the Python-list
mailing list