Encontré esta pregunta porque quería plantear una pregunta por qué hay un impacto en el rendimiento si uno usa funciones anidadas. Ejecuté pruebas para las siguientes funciones usando Python 3.2.5 en un portátil con Windows con un procesador Intel Core i5-2530M Quad Core 2.5 GHz
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
Medí las siguientes 20 veces, también para square1, square2 y square5:
s=0
for i in range(10**6):
s+=square0(i)
y obtuve los siguientes resultados
>>>
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
no tiene función anidada, square1
tiene una función anidada, square2
tiene dos funciones anidadas ysquare5
tiene cinco funciones anidadas. Las funciones anidadas solo se declaran pero no se llaman.
Entonces, si ha definido 5 funciones anidadas en una función que no llama, entonces el tiempo de ejecución de la función es el doble de la función sin una función anidada. Creo que debería ser cauteloso al usar funciones anidadas.
El archivo Python para toda la prueba que genera esta salida se puede encontrar en ideone .