Со страницы 582 Учим Python Лутца. Сделал все как в книге, по непонятной причине не работает
[
a = [1,2,3]
b = [2,4,5] # списки написал я, т.к. в оригинальном примере только функция, без аргументов и вызова
#
def myzip(*args):
iters = list(map(iter, args)) # python 3, поэтому list() - все как в книге
while iters:
res = [next(i) for i in iters]
yield tuple(res)
#
print(list(myzip(a,b)))
#
#Возвращается с ошибкой:
Traceback (most recent call last):
File "D:\Development\Programs\Simplest\iter_map.py", line 20, in myzip
res = [next(i) for i in iters] # ��� ������� i-�� �������� iters ��������� next - res - ������ �������� ������������ next()
File "D:\Development\Programs\Simplest\iter_map.py", line 20, in <listcomp>
res = [next(i) for i in iters] # ��� ������� i-�� �������� iters ��������� next - res - ������ �������� ������������ next()
StopIteration
#
The above exception was the direct cause of the following exception:
#
Traceback (most recent call last):
File "D:\Development\Programs\Simplest\iter_map.py", line 30, in <module>
print(list(myzip(a,b)))
RuntimeError: generator raised StopIteration
#
#Решил разобраться, откуда SopIterations и модифицировал код:
#
a = [1,2,3]
b = [2,4,5]
#
def myzip(*args):
iters = list(map(iter, args))
while iters:
res = [next(i) for i in iters]
yield tuple(res)
c = myzip(a,b)
print(c)
print(next(c))
print(next(c))
print(next(c))
#
#Возвращает без ошибки (логично, так как в массивах по 3 элемента, следующий next вызовет ошибку):
#
<generator object myzip at 0x03A281F0>
(1, 2)
(2, 4)
(3, 5)
#
#Очевидно, что то не так с условием while - переписал
#
while iters: -> while all(iters)
#но это не помогло
#
#Буду очень благодарен, если кто то поможет мне понять, что именно пошло не так, и почему такой #пример в книге. Это опечатка, или это что-то связанное с версиями, или где-то я накосячил?
#
#P.S. не совсем разобрался, как работает редактор сообщений на форуме, не пинайте плиз ))
]