def count():
fs = []
for i in range(1, 4):
def f(j):
def g():
return j*j
return g
r = f(i)
fs.append(r) #fs作为列表,为什么可以append(r)?(而r是f所返回的函数)
return fs #个人的想法应该是fs.append(r())
f1, f2, f3 = count()
print f1(), f2(), f3()
想弄明白的是:这里传入append的r是以什么形式传入的呢
谢谢各位指教:D
est transmis sous la forme d'une définition de fonction, similaire à un appel différé. Ce n'est pas évident dans votre exemple,
.Vous pouvez considérer le r dans le retour r dans la fonction comme une variable, mais cette variable enregistre la définition de la fonction
.L'appel réel à la fonction se fait via x() plus tard
r est un objet, et le type de cet objet est une fonction.
En d'autres termes, r est un objet de type fonction, comme
1 est un objet de type
entier'hi' est un objet de type String tout comme
Il est également possible de changer
en
Notez que ce n'estfs.append(r())
, mais la signification de la fonction est différente Après avoir exécuté la fonctioncount()
, elle renverra le résultat[1, 4, 9]
, et vous ne pourrez plus utiliserprint f1(), f2(), f3()
pour. imprimez le résultat. La raison est :pas
g
, donc ce qui est renvoyé en exécutantg()
est en faitcount()
une liste contenant trois fonctions de fermeture, chaque fonction de fermeture lie différentes variables libres (respectivement 1, 2, 3), donc après avoir décompressé cette liste dans[g1, g2, g3]
, exécuterf1, f2, f3
équivaut à exécuter trois fonctions et à imprimer les résultats, donc le résultat final estprint f1(), f2(), f3()
1, 4, 9
f1 = fs[0] = r = g
C'est pourquoi
f1()