Lorsque nous transmettons une fonction, parfois nous n'avons pas besoin de définir explicitement la fonction. Il est plus pratique de transmettre directement la fonction anonyme.
En Python, la prise en charge des fonctions anonymes est limitée. Toujours en prenant comme exemple la fonction map(), lors du calcul de f(x)=x2, en plus de définir une fonction de f(x), vous pouvez aussi passer directement une fonction anonyme :
>>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])) [1, 4, 9, 16, 25, 36, 49, 64, 81]
Vous pouvez voir par comparaison Out, la fonction anonyme lambda x : x * x est en fait :
def f(x): return x * x
Le mot-clé lambda représente la fonction anonyme, et le x avant les deux points représente le paramètre de la fonction.
Les fonctions anonymes ont une limitation, c'est-à-dire qu'elles ne peuvent avoir qu'une seule expression. Il n'est pas nécessaire d'écrire return La valeur de retour est le résultat de l'expression.
Il y a un avantage à utiliser des fonctions anonymes, car la fonction n'a pas de nom, vous n'avez donc pas à vous soucier des conflits de noms de fonction. De plus, la fonction anonyme est également un objet fonction. Vous pouvez également affecter la fonction anonyme à une variable puis utiliser la variable pour appeler la fonction :
>>> f = lambda x: x * x >>> f <function <lambda> at 0x101c6ef28> >>> f(5)25
De même, vous pouvez également renvoyer la fonction anonyme. comme valeur de retour, par exemple :
def build(x, y): return lambda: x * x + y * y
Encapsule les détails pour améliorer la sécurité et la contrôlabilité. Il est souvent utilisé en dehors des fonctions dans la portée globale, limitant ainsi l'ajout d'un trop grand nombre de variables et de fonctions à la portée globale. .
L'utilisation d'une portée au niveau du bloc dans la portée globale peut réduire le problème des fermetures occupant la mémoire, car il n'y a aucune référence à la fonction anonyme et sa chaîne de portée peut être détruite immédiatement tant que la fonction est exécutée.
Portée Mimic au niveau du bloc (privée) :
function box(){ for(var i=0;i<5;i++){ //块级作用域(js无) } var i //即便重新声明,也不会影响之前的值 alert(i);//5 } box();
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!