Programmation fonctionnelle Python : fonctions de retour et fonctions anonymes

WBOY
Libérer: 2023-04-12 14:37:20
avant
1293 Les gens l'ont consulté

Programmation fonctionnelle Python : fonctions de retour et fonctions anonymes


Fonction de retour

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
Copier après la connexion

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
Copier après la connexion

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>
Copier après la connexion

Et lorsque la fonction a est appelée, le processus de quadrature est exécuté :

>>> a()
24
Copier après la connexion

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.

Fonction anonyme

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]
Copier après la connexion

Comme le montre la comparaison, la fonction anonyme lambda x : x*x*x est. équivalent à :

def f(x):
 return x * x * x
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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!

Étiquettes associées:
source:51cto.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal