2012-03-03 3 views
1

Если у меня есть функцияPython: вызывать одну и ту же функцию с теми же аргументами несколько раз или сохранять результат как промежуточное значение?

def bar(n): 
    return n**100 

Будет ли разница в производительности между

for i in range(1000000): 
    x = bar(30) 
    # use x for something 

и

x = bar(30) 
# use x for something 1,000,000 times 

Я не знаю, если интерпретатор был оптимизирован для случаев, таких как это?

+0

Возможный дубликат [ли Python оптимизирует вызовы функций из циклов?] (Http://stackoverflow.com/questions/7243444/does-python-optimize-function-calls-from-loops) – delnan

+1

Также обратите внимание, что в императивном программировании языки, множественный вызов функции с теми же аргументами может иметь совершенно разные эффекты. Доказательство того, что некоторые такие вызовы могут быть опущены, может потребовать значительного межпроцедурного анализа, и для их включения требуется либо раннее связывание (которое просто * не существует * в Python), и оптимизационный компилятор, либо компилятор JIT. – delnan

ответ

5

Компилятор CPython делает очень мало простых peephole optimisations, но он, конечно же, никогда не будет оптимизировать вызов функции - как он узнает, есть ли функция в любом случае? Во время компиляции он обычно даже не знает, к какой функции относится имя bar, и привязка имени может измениться в любое время.

Если у вас есть сомнения, просто измерьте производительность самостоятельно - модуль timeit - ваш друг.

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