recherche

Maison  >  Questions et réponses  >  le corps du texte

函数 - 关于python闭包的一些疑问

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

PHPzPHPz2888 Il y a quelques jours236

répondre à tous(4)je répondrai

  • 迷茫

    迷茫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

    .

    répondre
    0
  • ringa_lee

    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

    répondre
    0
  • 大家讲道理

    大家讲道理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

    répondre
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:31:24

    f1 = fs[0] = r = g

    C'est pourquoi

    f1()

    répondre
    0
  • Annulerrépondre