From 6f7d1e9425251563c4c68578c04fa0c7a83af3bc Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Thu, 16 May 2024 21:05:00 -0500 Subject: [PATCH 1/4] Move try/except out of the inner loop. --- Doc/library/itertools.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst index a19baa3f0e439f..c4172d08b0531f 100644 --- a/Doc/library/itertools.rst +++ b/Doc/library/itertools.rst @@ -698,18 +698,18 @@ 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)) + initial_link = [None, None] # node: [data, link] + return tuple(_tee(iterator, initial_link) for _ in range(n)) def _tee(iterator, link): - while True: - if link[1] is None: - try: + try: + while True: + if link[1] is None: link[:] = [next(iterator), [None, None]] - except StopIteration: - return - value, link = link - yield value + 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 From 3bba6d8d4e33726c10b281ca4428379e4f34815a Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 18 May 2024 00:51:04 -0500 Subject: [PATCH 2/4] Rename to "shared_link" --- Doc/library/itertools.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst index c4172d08b0531f..e19f946c708621 100644 --- a/Doc/library/itertools.rst +++ b/Doc/library/itertools.rst @@ -698,8 +698,8 @@ loops that truncate the stream. def tee(iterable, n=2): iterator = iter(iterable) - initial_link = [None, None] # node: [data, link] - return tuple(_tee(iterator, initial_link) for _ in range(n)) + shared_link = [None, None] # node: [data, link] + return tuple(_tee(iterator, shared_link) for _ in range(n)) def _tee(iterator, link): try: From 0758bbe16e5738281eddb65de863968d80b9f36f Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 18 May 2024 01:12:35 -0500 Subject: [PATCH 3/4] Simpler but slightly slower code --- Doc/library/itertools.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst index e19f946c708621..c0693656a5e30f 100644 --- a/Doc/library/itertools.rst +++ b/Doc/library/itertools.rst @@ -705,7 +705,8 @@ loops that truncate the stream. try: while True: if link[1] is None: - link[:] = [next(iterator), [None, None]] + link[0] = next(iterator) + link[1] = [None, None] value, link = link yield value except StopIteration: From 8a8a142cd921c4e1f1d39088dfa51255509e77f8 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 18 May 2024 01:14:00 -0500 Subject: [PATCH 4/4] . --- Doc/library/itertools.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst index c0693656a5e30f..6d33748898361d 100644 --- a/Doc/library/itertools.rst +++ b/Doc/library/itertools.rst @@ -698,7 +698,7 @@ loops that truncate the stream. def tee(iterable, n=2): iterator = iter(iterable) - shared_link = [None, None] # node: [data, link] + shared_link = [None, None] return tuple(_tee(iterator, shared_link) for _ in range(n)) def _tee(iterator, link): pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy