Maison > Questions et réponses > le corps du texte
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
迷茫2017-04-17 17:31:24
est transmis sous la forme d'une définition de fonction, similaire à un appel différé. Ce n'est pas évident dans votre exemple,
.def count():
def r():
return "hello world"
return r
x = count()
print x #<function r at 0x7fc562978668>
print x() # hello world
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
ringa_lee2017-04-17 17:31:24
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
大家讲道理2017-04-17 17:31:24
Il est également possible de changer
en fs.append(r())
, mais la signification de la fonction est différente Après avoir exécuté la fonction count()
, elle renverra le résultat [1, 4, 9]
, et vous ne pourrez plus utiliser print f1(), f2(), f3()
pour. imprimez le résultat. La raison est : <🎜 >
r=f(i)=g
Notez que ce n'est pas g
, donc ce qui est renvoyé en exécutant g()
est en fait count()
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écuter f1, f2, f3
équivaut à exécuter trois fonctions et à imprimer les résultats, donc le résultat final est print f1(), f2(), f3()
1, 4, 9