Python вложен для цикла с использованием * той же * переменной

Из любопытства я попытался реализовать вложенный цикл for, используя одну и ту же итерирующую переменную как во внешнем, так и во внутреннем цикле for.

for i in range(3):
    for i in range(4):
        print("i = %s" % i)

Что именно здесь происходит за кулисами? Кстати, внутренняя печать выполняется 12 раз.


person Gino    schedule 17.08.2017    source источник
comment
Оператор for не использует i для зацикливания. Он просто присваивает текущее значение итерации i перед запуском тела цикла. Вот почему он работает нормально. Однако печать будет отображать только внутренние значения for i.   -  person spectras    schedule 17.08.2017
comment
Внутренний цикл перезаписывает внешнюю переменную i. Это нормально, пока вы ничего с этим не делаете.   -  person cs95    schedule 17.08.2017
comment
@vaultah Не удалось найти дубликат?   -  person cs95    schedule 17.08.2017
comment
@cᴏʟᴅsᴘᴇᴇᴅ нет, не искал :)   -  person vaultah    schedule 17.08.2017
comment
@omu_negru Гм, это не вопрос о Python, так что эта логика здесь не совсем применима. ;)   -  person PM 2Ring    schedule 17.08.2017
comment
Этот вопрос выглядит довольно близко   -  person vaultah    schedule 17.08.2017
comment
Это может быть другой язык, но это по-прежнему переменное затенение, и способ его работы одинаков для обоих языков.   -  person omu_negru    schedule 17.08.2017
comment
@vaultah Я тоже только что нашел это. :) Думаю, пока сойдет.   -  person PM 2Ring    schedule 17.08.2017
comment
@omu_negru Не совсем, хотя я согласен, что есть сходство. В Python каждый объект диапазона поддерживает собственное текущее значение, возвращая его по мере повторения. В коде C++ есть две области, в коде OP есть только 1 область (Python), нет внутренней i, затеняющей внешнюю i, есть два независимых объекта range, причем оба их текущих значения присваиваются такое же i имя.   -  person PM 2Ring    schedule 17.08.2017


Ответы (2)


Переменная «i» перебирает элементы во внешнем цикле, но затем переустанавливается для повторения элементов во внутреннем цикле. И так далее. Суть в том, что вы собираетесь печатать элементы внутреннего цикла 3 раза (размер внешнего)

person Aviad    schedule 17.08.2017

Что происходит, так это то, что второй я затеняет первый, поэтому инструкция печати будет только обратитесь к внутреннему циклу i

person omu_negru    schedule 17.08.2017