Несмотря на другие ответы, которые утверждают, что никакого эффекта нет, я подумал, что должен проверить.Я нашел очень определенное преимущество для определения функции снаружи.
import random
def ff1(i):
r1 = random.random()
r2 = random.random()
if r1 < 0.5:
return i*r2
else:
return i/r2
def f1(i):
return ff1(i)
def f2(i):
def ff2(i):
r1 = random.random()
r2 = random.random()
if r1 < 0.5:
return i*r2
else:
return i/r2
return ff2(i)
%%timeit -r 10 -n 10
x = 0.5
for i in xrange(10000):
x = f1(x)
10 циклов, лучшее из 10: 4,2 мс на цикл
%%timeit -r 10 -n 10
x = 0.5
for i in xrange(10000):
x = f2(x)
10 циклов, лучшее из 10: 5,33 мс на цикл
%%timeit -r 1 -n 1
x = 0.5
for i in xrange(1000000):
x = f1(x)
1 циклов, лучшее из 1: 438 мс на цикл
%%timeit -r 1 -n 1
x = 0.5
for i in xrange(1000000):
x = f2(x)
1 циклов, лучшее из 1: 574 мс на цикл