Python: вызывать одну и ту же функцию с одинаковыми аргументами несколько раз или сохранить результат как промежуточное значение? - PullRequest
1 голос
/ 03 марта 2012

Если у меня есть функция

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

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

Ответы [ 2 ]

5 голосов
/ 03 марта 2012

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

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

1 голос
/ 03 марта 2012

Зависит от реализации. Pypy добавил движение инвариантного кода цикла в версии 1.5 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...