Если я выполню,

a = iter([1,2,3])                                                      
for x in a: 
    print(x) 
    if x==1: 
        z=next(a)

Я получил

1
3

Что я ожидаю, поскольку вызов next продвигает итератор и пропускает 2.

Однако в интерактивном режиме (командная строка), если я удалю назначение z= и вызову только next, оно будет вести себя совсем иначе.

>>> a = iter([1,2,3])                                                      
>>> for x in a: 
...    print(x) 
...    if x==1: 
...        next(a)

Дает мне

1
2
3

Я использую Python 3.8.8 в 64-разрядной версии Windows. Ожидается ли это? Это происходит только в интерактивном режиме.

0
Saulpila 2 Мар 2021 в 08:50

1 ответ

Лучший ответ

Интерпретатор возвращает возвращаемое значение next() в дополнение к x, печатаемому на каждой итерации.

>>> a = iter([1,2,3])                                                      
>>> for x in a: 
...    print(x) 
...    if x==1: 
...        next(a)

Итак, 1 и 3 - это выходные данные print(x), 2 - возвращаемые значения из next(). Если вы назначаете вывод z=next(), все работает как ожидалось 1,3, потому что ваш z не возвращается и не печатается. Присвоение результата «next (a)» переменной запрещает печать его результата, так что печатаются только альтернативные значения переменной цикла «x»

1
toRex 2 Мар 2021 в 06:21