diff --git a/Lib/weakref.py b/Lib/weakref.py index cfe9456bcc2949595a74801a337eb9820c220f48..9373f024057b7c7706a29e43dcf16a29f8b03270 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 - - -class WeakKeyedKeyIterator(BaseIter): - def __init__(self, weakdict): - self._next = weakdict.data.iterkeys().next - - 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 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 + +def WeakValuedValueIterator(weakdict): + for wr in weakdict.data.itervalues(): + obj = wr() + if obj is not None: + yield obj + +def WeakValuedItemIterator(weakdict): + for wr in weakdict.data.itervalues(): + value = wr() + if value is not None: + yield wr.key, value