Да, между while и for есть огромная разница.
Оператор для выполняет итерацию по коллекции, или итерируемому объекту, или функции генератора.
Оператор while просто зацикливается, пока условие не станет False.
Это не предпочтение. Вопрос в том, каковы ваши структуры данных.
Часто мы представляем значения, которые мы хотим обработать, как range
(фактический список) или xrange
(который генерирует значения). Это дает нам структуру данных, специально разработанную для оператора for .
Однако, как правило, у нас есть готовая коллекция: набор, кортеж, список, карта или даже строка уже итеративная коллекция, поэтому мы просто используем цикл для .
В некоторых случаях нам может потребоваться выполнить некоторую обработку функционального программирования, и в этом случае мы можем применить это преобразование как часть итерации. Функции sorted
и enumerate
применяют к итерируемому преобразование, которое естественным образом согласуется с оператором for .
Если у вас нет аккуратной структуры данных для перебора, или у вас нет функции генератора, которая управляет вашей обработкой, вы должны использовать , а .