Когда использовать "while" или " for " в Python
Я нахожу проблемы, когда я должен использовать while
петли или for
цикл в Python. Похоже, люди предпочитают использовать for
loop (меньше строк кода?). Есть ли какая-то конкретная ситуация, в которой я должен использовать тот или иной? Это вопрос личных предпочтений? Коды, которые я прочитал до сих пор, заставили меня думать, что между ними есть большие различия.
6 ответов
Да, существует огромная разница между while и for.
на на оператор выполняет итерацию через коллекцию или итерацию объекта или функции генератора.
на пока оператор просто зацикливается, пока условие не будет ложным.
это не предпочтение. Вопрос в том, каковы ваши структуры данных.
часто мы представляем значения, которые мы хотим обработать, как range
(реальный список), или xrange
(который генерирует значение.) Это дает нам структуру данных, адаптированную для на заявление.
обычно, однако, у нас есть готовая коллекция: набор, кортеж, список, карта или даже строка уже является итерабельной коллекцией, поэтому мы просто используем на петли.
в некоторых случаях нам может потребоваться некоторая обработка функционального программирования для нас, и в этом случае мы можем применить это преобразование как часть итерации. The sorted
и enumerate
функции применяются преобразование на iterable, которое естественно соответствует на заявление.
если у вас нет аккуратной структуры данных для итерации, или у вас нет функции генератора, которая управляет вашей обработкой, вы должны использовать пока.
while
полезно в сценариях, где условие разрыва логически не зависит от какой-либо последовательности. Например, рассмотрим непредсказуемые взаимодействия:
while user_is_sleeping():
wait()
конечно, вы мог бы напишите соответствующий итератор, чтобы инкапсулировать это действие и сделать его доступным через for
– но как это послужит читаемости?1
во всех других случаях в Python используйте for
(или соответствующая функция более высокого порядка, которая инкапсулирует петля.)
1 Если user_is_sleeping
возвращает функция False
когда false, пример кода может быть переписан как следующий for
петли:
for _ in iter(user_is_sleeping, False):
wait()
на for
- это более подходящие для Python выбор для перебора списка, так как это проще и легче читать.
например это:
for i in range(11):
print i
- это гораздо проще и легче читать, чем этот:
i = 0
while i <= 10:
print i
i = i + 1
прежде всего, существуют различия между циклом for в python и на других языках. В то время как в python он перебирает список значений (например, для значения в [4,3,2,7]), в большинстве других языков (C/C++, Java, PHP и т. д.) Он действует как цикл while, но легче читать.
для циклов обычно используются, когда известно количество итераций (например, длина массива), и в то время как циклы используются, когда вы не знаете, сколько времени это займет (например,пузырь вроде алгоритм, который петляет, пока значения не отсортированы)
считайте обработки итерируемые объекты. Вы можете сделать это с помощью for
петли:
for i in mylist:
print i
или, вы можете сделать это с помощью while
петли:
it = mylist.__iter__()
while True:
try:
print it.next()
except StopIteration:
break
оба этих блока кода делают принципиально одно и то же, принципиально одинаково. Но ... --2--> цикл скрывает создание итератора и обработку StopIteration
исключение, так что вам не нужно иметь дело с ними самостоятельно.
единственный раз, когда я могу думать, что вы используете while
цикл обрабатывать итерацию можно было бы, если вам по какой-то причине нужно получить доступ к итератору напрямую, например, вам нужно пропустить элементы в списке при некоторых обстоятельствах.
для циклов обычно делают более ясным, что делает итерация. Вы не всегда можете использовать их напрямую, но в большинстве случаев логика итерации с циклом while может быть обернута внутри функции генератора. Например:
def path_to_root(node):
while node is not None:
yield node
node = node.parent
for parent in path_to_root(node):
...
вместо
parent = node
while parent is not None:
...
parent = parent.parent