From cc0def18685bab5b75e62d3c1780aa921b5f3396 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 13 Aug 2004 07:12:45 +0000 Subject: [PATCH] Convert weak iterators to generator form. --- Lib/weakref.py | 68 +++++++++++++++----------------------------------- 1 file changed, 20 insertions(+), 48 deletions(-) diff --git a/Lib/weakref.py b/Lib/weakref.py index cfe9456bcc2..9373f024057 100644 --- a/Lib/weakref.py +++ b/Lib/weakref.py @@ -277,54 +277,26 @@ class WeakKeyDictionary(UserDict.UserDict): self.update(kwargs) -class BaseIter: - def __iter__(self): - return self +def WeakKeyedKeyIterator(weakdict): + for wr in weakdict.data.iterkeys(): + obj = wr() + if obj is not None: + yield obj +def WeakKeyedItemIterator(weakdict): + for wr, value in weakdict.data.iteritems(): + key = wr() + if key is not None: + yield key, value -class WeakKeyedKeyIterator(BaseIter): - def __init__(self, weakdict): - self._next = weakdict.data.iterkeys().next +def WeakValuedValueIterator(weakdict): + for wr in weakdict.data.itervalues(): + obj = wr() + if obj is not None: + yield obj - def next(self): - while 1: - wr = self._next() - obj = wr() - if obj is not None: - return obj - - -class WeakKeyedItemIterator(BaseIter): - def __init__(self, weakdict): - self._next = weakdict.data.iteritems().next - - def next(self): - while 1: - wr, value = self._next() - key = wr() - if key is not None: - return key, value - - -class WeakValuedValueIterator(BaseIter): - def __init__(self, weakdict): - self._next = weakdict.data.itervalues().next - - def next(self): - while 1: - wr = self._next() - obj = wr() - if obj is not None: - return obj - - -class WeakValuedItemIterator(BaseIter): - def __init__(self, weakdict): - self._next = weakdict.data.itervalues().next - - def next(self): - while 1: - wr = self._next() - value = wr() - if value is not None: - return wr.key, value +def WeakValuedItemIterator(weakdict): + for wr in weakdict.data.itervalues(): + value = wr() + if value is not None: + yield wr.key, value