J'ai trouvé cette question parce que je voulais poser une question pourquoi il y a un impact sur les performances si l'on utilise des fonctions imbriquées. J'ai effectué des tests pour les fonctions suivantes en utilisant Python 3.2.5 sur un ordinateur portable Windows avec un processeur Intel 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
J'ai mesuré les 20 fois suivantes, également pour square1, square2 et square5:
s=0
for i in range(10**6):
s+=square0(i)
et a obtenu les résultats suivants
>>>
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
n'a pas de fonction imbriquée, square1
a une fonction imbriquée, square2
a deux fonctions imbriquées et square5
a cinq fonctions imbriquées. Les fonctions imbriquées sont uniquement déclarées mais pas appelées.
Donc, si vous avez défini 5 fonctions imbriquées dans une fonction que vous n'appelez pas, le temps d'exécution de la fonction est le double de la fonction sans fonction imbriquée. Je pense qu'il faut être prudent lors de l'utilisation de fonctions imbriquées.
Le fichier Python pour l'ensemble du test qui génère cette sortie se trouve sur ideone .