Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import weakref
- import itertools
- import collections
- def tee_from_documentation(iterable, n=2):
- it = iter(iterable)
- deques = [collections.deque() for i in range(n)]
- def gen(mydeque):
- while True:
- if not mydeque: # when the local deque is empty
- try:
- newval = next(it) # fetch a new value and
- except StopIteration:
- return
- for d in deques: # load it to all the deques
- d.append(newval)
- yield mydeque.popleft()
- return tuple(gen(d) for d in deques)
- class Object:
- pass
- def test(tee_impl):
- print(f"Using {tee_impl}")
- generator = (Object() for i in range(1))
- iterator = tee_impl(generator, 1)[0]
- ref = [weakref.ref(item) for item in iterator][0]
- print(f" De-referenced after iteration: {ref() is None}")
- del iterator
- print(f" De-referenced after iterator delete: {ref() is None}")
- test(tee_from_documentation)
- test(itertools.tee)
- # Result:
- #
- # Using <function tee_from_documentation at 0x7f98902e80e0>
- # De-referenced after iteration: True
- # De-referenced after iterator delete: True
- # Using <built-in function tee>
- # De-referenced after iteration: False
- # De-referenced after iterator delete: True
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement