Обычная конструкция - запускать цикл до тех пор, пока что-то не будет найдено, а затем вырваться из цикла. Проблема в том, что, если я выйду из цикла или завершу цикл, мне нужно определить, какой случай произошел. Один из способов - создать флаг или переменную хранилища, которая позволит мне выполнить второй тест, чтобы увидеть, как завершился цикл.
Например, предположим, что мне нужно искать в списке и обрабатывать каждый элемент, пока не будет найден элемент флага, а затем прекратить обработку. Если элемент флажка отсутствует, необходимо создать исключение.
Использование Python for
... else
построить у вас есть
for i in mylist:
if i == theflag:
break
process(i)
else:
raise ValueError("List argument missing terminal flag.")
Сравните это с методом, который не использует этот синтаксический сахар:
flagfound = False
for i in mylist:
if i == theflag:
flagfound = True
break
process(i)
if not flagfound:
raise ValueError("List argument missing terminal flag.")
В первом случае raise
тесно связан с циклом for it работает с. Во второй привязка не так сильна, и ошибки могут быть внесены во время обслуживания.
Если я не неправильно понимаю это:
Может ли расхождение проистекать из того факта, что Карты Google рассчитывают расстояние, которое вы проезжаете, а не «по прямой»?
Карты Google не рассчитывают кратчайшее прямое расстояние - оно проходит по дорогам и (воздух, вода,?)