Ответ 1
Вопрос предполагает, что вызов foo() n раз является априорной необходимой задачей. Откуда я пришел? Это длина чего-то итерабельного? Затем повторите итерацию. Когда я набираю Python, я нахожу, что я использую мало для каких-либо произвольных значений; для вашего n есть более существенный смысл, который потерялся, когда он стал целым.
Ранее сегодня я столкнулся с провокационной статьей Nicklaus Wirth для IEEE Computer под названием Хорошие идеи - через зазеркалье (в архиве версия для будущих читателей). В разделе 4 он привносит другой уклон в программирование конструкций, которые все (включая самого себя) приняли как должное, но которые содержат выразительные недостатки:
"Общность алголов
for
выражение должно было быть предупреждением сигнал всем будущим дизайнерам всегда сохраняют основную цель строить в уме и утомляться преувеличенной общности и сложности, который может легко стать непродуктивный".
Алгол for
эквивалентен C/Java for
, он просто делает слишком много. Этот документ полезен для чтения, хотя бы потому, что он делает так, что он не воспринимается как нечто само собой разумеющееся, что мы так легко делаем. Поэтому, возможно, лучший вопрос: "Зачем вам нужен цикл, который выполняется произвольным числом раз?"