La fonction dite de retour, comme son nom l'indique, consiste à utiliser la fonction comme valeur de retour. En plus de prendre des fonctions comme paramètres, les fonctions d'ordre supérieur peuvent également renvoyer des fonctions comme résultats. Implémentons une multiplication continue de paramètres variables. La fonction quadrature peut être définie comme :
def calc_fac(*args): fx = 0 for n in args: fx = fx * n return fx
Plusieurs fois, lorsque la fonction quadrature est définie, nous n'avons pas besoin de la multiplier immédiatement, mais nous l'appellerons en fonction des calculs ultérieurs. Pour le moment, nous ne pouvons pas renvoyer le résultat de la fonction, mais renvoyer la fonction elle-même, comme indiqué ci-dessous :
def lazy_fac(*args): def fac(): fx = 0 for n in args: fx = fx * n return fx return fac
Après avoir redéfini la fonction quadrature, lorsque nous appelons lazy_fac(), ce qui est renvoyé n'est pas le résultat de la quadrature. . , mais la fonction quadrature :
>>> a=lazy_fac(1,2,3,4) >>> a <function lazy_fac.<locals>.fac at 0x002a5dr42>
Et lorsque la fonction a est appelée, le processus de quadrature est exécuté :
>>> a() 24
Dans cet exemple, nous définissons la fonction fac dans la fonction lazy_fac, et fac peut être appelée une fonction interne, et lazy_fac est une fonction externe. La fonction interne fac peut faire référence aux paramètres et variables locales de la fonction externe. Les paramètres et les variables sont enregistrés dans la fonction interne que nous revenons finalement. Cette structure de programme est appelée fermeture en Python.
Dans la structure de fermeture, lorsque la fonction renvoie un résultat, le processus de fonction n'est pas exécuté immédiatement, mais est exécuté après l'appel de a().
En bref, en programmation fonctionnelle, en plus de renvoyer un résultat de calcul, une fonction peut également renvoyer une fonction non exécutée. Lorsque vous renvoyez une fonction, rappelez-vous toujours que la fonction n'a pas été exécutée et essayez de ne pas introduire de variables telles que des variables de boucle qui pourraient entraîner des modifications dans la fonction renvoyée.
Lorsque nous transmettons une fonction ou que la structure du code est trop complexe, nous pouvons utiliser des fonctions anonymes au lieu de définitions de fonctions explicites. À l’heure actuelle, les fonctions anonymes simplifieront considérablement la structure du code et la rendront plus raffinée.
Prenez la fonction map présentée précédemment comme exemple pour calculer x3. Jetez un œil à la fonction de la fonction anonyme :
>>> list(map(lambda x: x * x * x, [1, 2, 3])) [1, 8, 27]
Comme le montre la comparaison, la fonction anonyme lambda x : x*x*x est. équivalent à :
def f(x): return x * x * x
lambda comme mot-clé de fonction anonyme, le x avant les deux points indique les paramètres de la fonction anonyme. Les fonctions anonymes ne peuvent avoir qu'une seule expression et il n'est pas nécessaire d'écrire return comme pour définir une fonction. Étant donné que les fonctions anonymes n'ont pas de nom de fonction, vous n'avez pas à vous soucier des conflits de noms de fonction lors de leur utilisation. En tant qu'objet fonction, la fonction anonyme est également conforme aux règles d'attribution de valeurs aux variables :
>>> fx = lambda x: x * x * x >>> fx <function <lambda> at 0x101c6ef28> >>> f(4) 64
De même, la fonction anonyme en tant que fonction peut également être utilisée comme fonction de retour :
def f(x): return lambda: x * x * x
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!