Я нашел этот вопрос, потому что хотел задать вопрос, почему это влияет на производительность, если кто-то использует вложенные функции.Я выполнил тесты для следующих функций, используя 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 .