for in else
для прохода (итерирования) по элементам последовательностей (таких как строки, списки, кортежи), либо других типов, поддерживающих итерирование. for el in [1, 2, 3]:
print(el)
else:
print('всё')
# 1 2 3 всё
in
, будучи вычисленной единожды, должна предоставить объект, поддерживающий итерирование. Для данного объекта создаётся итератор. Далее переменной, предшествующей in
, поочерёдно присваиваются значения [элементов], предоставляемые итератором и для каждого из них выполняется тело инструкции.# Проход по элементам словаря.
my_dict = {'a': 1, 'b': 2}
for item in my_dict.items():
print(item)
# item - кортеж из двух элементов
# ('a', 1)
# ('b', 2)
# Распаковка кортежа item в две переменных key и value:
for key, value in my_dict.items():
print('%s -> %s' % (key, value))
# a -> 1
# b -> 2
else
(если эта часть присутствует) и цикл завершается.break
позволяет прервать цикл. При этом часть после else
не будет выполнена.for el in [1, 2, 3]:
print(el)
if el == 2:
break
else:
print('этот текст не будет выведен')
# 1 2
continue
позволяет «проскочить» исполнение следующего после неё кода и продолжить проход по следующим элементам.for el in [1, 2, 3]:
if el == 2:
continue
print(el)
else:
print('всё')
# 1 3 всё
in
, на каждом из этапов цикла присваивается новое значение. Это означает, что любые назначения данной переменной, будь то произведённые до начала цикла или внутри него, будут потеряны в ходе последующего витка.in
, остаётся доступной с последним.for el in [1, 2, 3]:
pass
print(el) # 3
for el in []:
pass
print(el) # NameError
my_list = [1, 3, 4]
for el in my_list:
if el == 1:
del my_list[0]
print(el) # 1 4
for el in my_list:
if el == 1:
my_list.insert(0, 2)
print(el) # 1 1 1 1 1 ... бесконечная рекурсия
Если у вас есть, что сказать, можете представиться и исправить ситуацию.