Maison  >  Article  >  développement back-end  >  Secrets sur les fonctions de retour Python et les valeurs de retour

Secrets sur les fonctions de retour Python et les valeurs de retour

Tomorin
Tomorinoriginal
2018-08-17 17:53:351690parcourir

Je suis récemment entré en contact avec python et j'ai vu le concept de fonction de retour en python. Je n'ai été exposé qu'à la valeur de retour de fonction auparavant. Par exemple, python peut renvoyer un int. , str, list, dict, etc. Tapez data, ce que je veux dire ici, c'est que python prend également en charge la fonction de retour .

Tout d'abord, examinons la syntaxe de base de la prise en charge par Python de la fonction de retour

def f():
    print 'call f()...'
    # 定义函数g:
    def g():
        print 'call g()...'
    # 返回函数g:
    return g

Implémentons la somme des paramètres variables. Habituellement, la fonction de sommation est définie comme ceci :

def calc_sum(*args):
    ax = 0
    for n in args:
        ax = ax + n  
    return ax

Cependant, que se passe-t-il si la somme n'a pas besoin d'être calculée immédiatement, mais est calculée selon les besoins dans le code suivant ? Au lieu de renvoyer le résultat de la sommation, vous pouvez renvoyer la fonction de sommation :

def lazy_sum(*args):
    def sum():
        ax = 0
        for n in args:
            ax = ax + n       
        return ax   
        return sum

Lorsque nous appelons lazy_sum(), ce qui est renvoyé n'est pas le résultat de la sommation, mais la fonction de sommation :

>>> f = lazy_sum(1, 3, 5, 7, 9)
>>> f
<function lazy_sum.<locals>.sum at 0x101c6ed90>

Le résultat de la somme est effectivement calculé lorsque la fonction f est appelée :

>>> f()
25

Dans cet exemple, nous définissons la fonction somme dans la fonction lazy_sum, et la fonction interne somme peut référencer les paramètres et variables locales de la fonction externe lazy_sum. Lorsque lazy_sum renvoie la fonction sum, les paramètres et variables pertinents sont enregistrés dans la fonction renvoyée. Cette structure de programme appelée "Closure" a une grande puissance.

Veuillez noter encore une chose, lorsque nous appelons lazy_sum(), chaque appel retournera une nouvelle fonction, même si les mêmes paramètres sont passés :

>>> f1 = lazy_sum(1, 3, 5, 7, 9)
>>> f2 = lazy_sum(1, 3, 5, 7, 9)
>>> f1==f2
False

f1() et f2 Les résultats de l'appel de () ne s'influencent pas mutuellement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn