2015-11-02 5 views
-1

Простой вопрос, который, вероятно, из-за ключевых слов, привести к объяснению на саму функцию, а не разъяснения относительно того, или нет, следующий случай:Python - остановка шаг является функцией

При использовании функции диапазона для петля с функцией в качестве этапа остановки, например

for item in range(some_function()): 
    #do something 

является результатом вызова функции, хранящегося для использования или оцениваемого на каждом этапе?

Я бы представил его первый, но он волнует, что я не могу подтвердить.

+0

Вы проверили документы python для [версии 2] (https://docs.python.org/2/library/functions.html#range) и [версия 3] (https://docs.python.org /3/library/functions.html#func-range)? Вы должны указать, какую версию python вы используете. – ray

+0

Я провел некоторое время, делая именно это, я просто искал не то место. docs для инструкции [for] (https://docs.python.org/2/reference/compound_stmts.html#the-for-statement) должно было быть местом, которое я смотрел как иллюстрированный @BrenBarn. – Legato

+0

FWIW, вы можете легко протестировать такие вещи. Например, 'def f(): print ('in f'); возврат 5'. Теперь посмотрим, что 'for i в диапазоне (f()):' делает. –

ответ

4

Здесь нет ничего особенного в range. Поведение определено в the language reference.

В списке выражение вычисляется один раз

«Список выражение» это часть после того, как in (т.е. range(some_function()) в вашем примере). Независимо от того, что есть, он оценивается только один раз.

Смежные вопросы