fonction anonyme
Avez-vous déjà pensé à définir une fonction de rappel très courte, mais vous ne voulez pas utiliser def pour écrire une fonction aussi longue ? La réponse est oui.
Python utilise lambda pour créer des fonctions anonymes, c'est-à-dire qu'il n'utilise plus la forme standard de l'instruction def pour définir une fonction.
Les fonctions anonymes ont principalement les caractéristiques suivantes :
lambda n'est qu'une expression, et le corps de la fonction est beaucoup plus simple que def.
Le corps de lambda est une expression, pas un bloc de code. Seule une logique limitée peut être encapsulée dans des expressions lambda.
La fonction lambda a son propre espace de noms et ne peut pas accéder aux paramètres en dehors de sa propre liste de paramètres ou dans l'espace de noms global.
Syntaxe de base
lambda [arg1 [,arg2,.....argn]]:expression
Exemple :
# -*- coding: UTF-8 -*- sum = lambda num1 , num2 : num1 + num2; print( sum( 1 , 2 ) )
Résultat de sortie :
3
Remarque : Bien que les expressions lambda vous permettent de définir des fonctions simples, leur utilisation est limitée. Vous ne pouvez spécifier qu'une seule expression et sa valeur est la valeur de retour finale. C'est-à-dire qu'il ne peut pas contenir d'autres fonctionnalités du langage, notamment des instructions multiples, des expressions conditionnelles, des itérations, la gestion des exceptions, etc.
Dans les fonctions anonymes, il y a un problème spécial qui nécessite une attention particulière. Par exemple, modifiez l'exemple ci-dessus :
# -*- coding: UTF-8 -*- num2 = 100 sum1 = lambda num1 : num1 + num2 ; num2 = 10000 sum2 = lambda num1 : num1 + num2 ; print( sum1( 1 ) ) print( sum2( 1 ) )
À votre avis, quel sera le résultat ? La première sortie est 101, la seconde est 10001, le résultat ne l'est pas, le résultat de sortie est comme ceci :
10001 10001
C'est principalement parce que num2 dans l'expression lambda est une variable libre et que la valeur est liée au moment de l'exécution, plutôt que défini Il est lié à l'heure, ce qui est différent de la définition du paramètre de valeur par défaut de la fonction. Par conséquent, il est recommandé d’utiliser la première solution lorsque vous rencontrez cette situation.