Small improvements to the itertools docs (GH-123885)

This commit is contained in:
Raymond Hettinger 2024-09-09 20:57:49 -05:00 committed by GitHub
parent d359a7683e
commit 2afba5ca6d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 26 additions and 8 deletions

View file

@ -992,12 +992,16 @@ def product1(*args, **kwds):
else:
return
def product2(*args, **kwds):
def product2(*iterables, repeat=1):
'Pure python version used in docs'
pools = list(map(tuple, args)) * kwds.get('repeat', 1)
if repeat < 0:
raise ValueError('repeat argument cannot be negative')
pools = [tuple(pool) for pool in iterables] * repeat
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
for prod in result:
yield tuple(prod)
@ -1754,6 +1758,8 @@ def test_tee_recipe(self):
# Begin tee() recipe ###########################################
def tee(iterable, n=2):
if n < 0:
raise ValueError('n must be >= 0')
iterator = iter(iterable)
shared_link = [None, None]
return tuple(_tee(iterator, shared_link) for _ in range(n))
@ -1829,11 +1835,9 @@ def _tee(iterator, link):
self.assertEqual(list(a), list(range(100,2000)))
self.assertEqual(list(c), list(range(2,2000)))
# Tests not applicable to the tee() recipe
if False:
# test invalid values of n
self.assertRaises(TypeError, tee, 'abc', 'invalid')
self.assertRaises(ValueError, tee, [], -1)
# test invalid values of n
self.assertRaises(TypeError, tee, 'abc', 'invalid')
self.assertRaises(ValueError, tee, [], -1)
for n in range(5):
result = tee('abc', n)