Ho trovato questa domanda perché volevo porre una domanda sul perché c'è un impatto sulle prestazioni se si utilizzano funzioni annidate. Ho eseguito test per le seguenti funzioni utilizzando Python 3.2.5 su un notebook Windows con un processore Intel i5-2530M Quad Core da 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
Ho misurato le seguenti 20 volte, anche per quadrato1, quadrato2 e quadrato5:
s=0
for i in range(10**6):
s+=square0(i)
e ha ottenuto i seguenti risultati
>>>
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
non ha una funzione nidificata, square1
ha una funzione nidificata, square2
ha due funzioni nidificate e square5
ha cinque funzioni nidificate. Le funzioni annidate vengono solo dichiarate ma non chiamate.
Quindi, se hai definito 5 funzioni annidate in una funzione che non chiami, il tempo di esecuzione della funzione è il doppio di quello della funzione senza una funzione annidata. Penso che dovrebbe essere cauto quando si utilizzano funzioni annidate.
Il file Python per l'intero test che genera questo output può essere trovato su ideone .