Я подозреваю, что путаница вашего наставника прослеживается в том, что семантика языка Python для цикла настолько сильно отличается от других языков.
В языке, как C для цикла является более или менее синтаксическим сахаром для петли в то время:
for(i = 0; i < n; i++)
{
//do stuff
}
эквивалентен:
i = 0;
while(i < n)
{
//do stuff
i++
}
В Python она отличается. Его для циклов являются итераторными. Объект итератора инициализируется только один раз, а затем потребляется в последующих итерациях. Следующие фрагменты показывают, что в Python для цикла не является (легко) переводимые в время цикла, а также показывает, что с помощью цикла в то время как забота вашего наставника действует:
>>> def find_number_of_iterations():
print("called")
return 3
>>> for i in range(find_number_of_iterations()): print(i)
called
0
1
2
>>> i = 0
>>> while i < find_number_of_iterations():
print(i)
i += 1
called
0
called
1
called
2
called
Вы можете легко проверили это сами, но: либо Кстати, функция вызывается только один раз. – jonrsharpe
Как я могу проверить это. Мой наставник критиковал мой код, который во втором варианте, поскольку он говорит, что он будет оценивать в каждом цикле. – oat
Тогда вы можете сказать своему наставнику, что они не правы! Вы можете проверить это, передав функцию, которая записывает, сколько раз она вызывается как «find_number_of_iterations», и затем проверяет, является ли это '1' или нет. – jonrsharpe