Ecrire des fonctions à l'intérieur de fonctions
En C, c'est impossible. Mais en Python, on peut écrire des fonctions à l'intérieur de fonctions.
En Python, les variables sont capturées par référence (bounded by reference).
def f():
i = 1
def g():
return i+1
i = 2
return g()
f()
3
Ne vous inquiétez pas ! On peut aussi simuler la capture par valeurs (bounding by value). Pour ce faire, il suffit d'utiliser un paramètre par défaut.
def f():
i = 1
def g(x,i=i):
return i+x
i = 2
return g(20)
f()
21
def f():
A = []
for i in range(10):
def g(i=i):
return i+1
A.append(g)
return A
f()[5]()
6
Bien sûr, c'est le même principe avec une lambda expression.
def f():
return [lambda : i+1 for i in range(10)]
f()[5]()
10
def f():
return [lambda i=i: i+1 for i in range(10)]
f()[5]()
6