2016-08-07 2 views
1

Для некоторых п, позволяет определить результат следующим образом:Оценка экспрессии в состоянии петли

result = [x for x in [i for i in range(0, n)]] 

оценить ли питон внутренний список каждый раз? Или он оценивает его только в первый раз? Поскольку это разница между временем пробега O (N) или O (N^2).
Например:

result = [x for x in func()] 

ли Python вызвать функцию FUNC каждой итерации?

Это может быть дубликат, я просто не мог его найти.

+0

Ум, каждый итеративный в вашем первом выражении повторяется один раз. Сначала «диапазон» повторяется для построения внутреннего списка, затем внутренний список повторяется (один раз) для создания внешнего списка (который идентичен внутреннему списку и «диапазону», что делает все итерирование довольно глупым). – Blckknght

+0

Да, это просто пример. Значит, функция будет вызываться только один раз? Это делает O (n)? – wjk2a1

+0

Это точно так же, как обычный цикл 'for', так же, как' for x в func(): do_whatever() ', функция func будет вызываться только один раз. Сложность времени - это «O (n)» плюс временная сложность «func» (которая в нотации Big-O обычно означает, что хуже). – Blckknght

ответ

4

Почему бы вам не попробовать это самостоятельно?

def foo(): 
    print('foo called') 
    return range(5) 


result = [x for x in [i for i in foo()]] 
print(result) 
>> foo called 
    [0, 1, 2, 3, 4] 

foo, очевидно, один раз.

+1

О, должно быть, подумал об этом! Спасибо! – wjk2a1

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