From: Raymond Hettinger Date: Sat, 18 May 2024 06:32:34 +0000 (-0500) Subject: Minor improvements to the docs for itertools.tee() (gh-119135) X-Git-Tag: v3.14.0a1~1885 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=81c3130c51a2b1504842cb1a93732cc03ddbbd79;p=thirdparty%2FPython%2Fcpython.git Minor improvements to the docs for itertools.tee() (gh-119135) --- diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst index a19baa3f0e43..6d3374889836 100644 --- a/Doc/library/itertools.rst +++ b/Doc/library/itertools.rst @@ -698,18 +698,19 @@ loops that truncate the stream. def tee(iterable, n=2): iterator = iter(iterable) - empty_link = [None, None] # Singly linked list: [value, link] - return tuple(_tee(iterator, empty_link) for _ in range(n)) + shared_link = [None, None] + return tuple(_tee(iterator, shared_link) for _ in range(n)) def _tee(iterator, link): - while True: - if link[1] is None: - try: - link[:] = [next(iterator), [None, None]] - except StopIteration: - return - value, link = link - yield value + try: + while True: + if link[1] is None: + link[0] = next(iterator) + link[1] = [None, None] + value, link = link + yield value + except StopIteration: + return Once a :func:`tee` has been created, the original *iterable* should not be used anywhere else; otherwise, the *iterable* could get advanced without