Я нашел этот вопрос, потому что хотел задать вопрос, почему при использовании вложенных функций снижается производительность. Я провел тесты для следующих функций, используя Python 3.2.5 на ноутбуке с Windows с четырехъядерным процессором Intel i5-2530M 2,5 ГГц.
def square0(x):
return x*x
def square1(x):
def dummy(y):
return y*y
return x*x
def square2(x):
def dummy1(y):
return y*y
def dummy2(y):
return y*y
return x*x
def square5(x):
def dummy1(y):
return y*y
def dummy2(y):
return y*y
def dummy3(y):
return y*y
def dummy4(y):
return y*y
def dummy5(y):
return y*y
return x*x
Я измерил следующие 20 раз, также для square1, square2 и square5:
s=0
for i in range(10**6):
s+=square0(i)
и получили следующие результаты
>>>
m = mean, s = standard deviation, m0 = mean of first testcase
[m-3s,m+3s] is a 0.997 confidence interval if normal distributed
square? m s m/m0 [m-3s ,m+3s ]
square0 0.387 0.01515 1.000 [0.342,0.433]
square1 0.460 0.01422 1.188 [0.417,0.503]
square2 0.552 0.01803 1.425 [0.498,0.606]
square5 0.766 0.01654 1.979 [0.717,0.816]
>>>
square0
не имеет вложенной функции, square1
имеет одну вложенную функцию, square2
имеет две вложенные функции и square5
имеет пять вложенных функций. Вложенные функции только объявляются, но не вызываются.
Итак, если вы определили 5 вложенных функций в функции, которую вы не вызываете, то время выполнения функции в два раза больше, чем у функции без вложенной функции. Думаю, следует быть осторожным при использовании вложенных функций.
Файл Python для всего теста, который генерирует этот вывод, можно найти по адресу ideone.
person
miracle173
schedule
05.10.2014
method_b
? (@inspector: строго говоря, вам это нужно, но это очень полезно, когда вы немного занимаетесь функциональным программированием, в частности, закрытием). - person   schedule 28.01.2011