Lorsque vous entendez lambda, vous pourriez penser à AWS lambda, Cette fois, je parle de lambda, ce qui signifie une fonction anonyme en Python.
En un mot, vous pouvez définir une fonction sans utiliser une instruction def.
Je pense que la déclaration def a la structure suivante.
def function(argument):
expression de retour
En lambda, il peut être décrit comme suit.
function =argument lambda:formule
Décrit comment utiliser ce lambda.
Tout d'abord, je voudrais écrire un programme avec une instruction def sans utiliser lambda.
Préparez une liste avec les alphabets inférieur et supérieur comme contenu,
Vous pouvez utiliser la fonction capitalize
pour le corriger en majuscules.
l = ['A', 'b', 'C', 'd', 'e', 'F', 'g']
def change_words(words, func):
for word in words:
print(func(word))
def sample_func(word):
return word.capitalize()
change_words(l, sample_func)
Dans la fonction change_words
L'argument est défini sur func, qui transmet les mots et la fonction.
Dans le processus à l'intérieur, les mots sont tournés dans une boucle for et la valeur est placée dans func ().
Le contenu est de changer le mot selon la définition de func.
Dans la fonction sample_func
Il prend le mot comme argument, et à l'intérieur, le début de la chaîne de caractères majuscule ()
C'est un processus tel que le retour en utilisant une méthode pour capitaliser.
Lorsque vous l'exécutez réellement, vous pouvez voir qu'il est affiché dans toutes les lettres majuscules.
A
B
C
D
E
F
G
lambda Écrivons le programme ci-dessus en utilisant lambda.
l = ['A', 'b', 'C', 'd', 'e', 'F', 'g']
def change_words(words, func):
for word in words:
print(func(word))
#def sample_func(word):
# return word.capitalize()
sample_func = lambda word: word.capitalize()
change_words(l, sample_func)
Il est possible d'écrire en une seule ligne comme ceci. Si vous essayez, vous obtiendrez le même résultat.
Cette fois, par souci de clarté, l'expression lambda
Je l'ai nommé sample_func
,
Convention de codage Python PEP8 Il est recommandé d'utiliser def lors de la définition d'une fonction avec un nom.
Par conséquent, il est possible de l'écrire directement et de le passer en tant que fonction sans lui donner de nom.
l = ['A', 'b', 'C', 'd', 'e', 'F', 'g']
def change_words(words, func):
for word in words:
print(func(word))
# def sample_func(word):
# return word.capitalize()
# sample_func = lambda word: word.capitalize()
change_words(l, lambda word: word.capitalize())
Avec cette description, vous pouvez utiliser la fonction sans la définir une par une. Je pense que ce sera un beau programme.
Pour ressentir davantage l'effet de lambda Ajoutons maintenant une fonction qui corrige l'alphabet aux rangs inférieurs.
Tout d'abord, écrivons-le avec une instruction def.
l = ['A', 'b', 'C', 'd', 'e', 'F', 'g']
def change_words(words, func):
for word in words:
print(func(word))
def sample_func(word):
return word.capitalize()
def sample_func2(word):
return word.lower()
change_words(l, sample_func)
change_words(l, sample_func2)
Une nouvelle fonction a été ajoutée avec le nom «sample_func2».
Lorsque vous l'exécutez réellement, les alphabets inférieurs sont également générés.
A
B
C
D
E
F
G
a
b
c
d
e
f
g
Le contenu de la fonction sample_func2
J'ai juste changé capitalize ()
en lower ()
.
Cependant, il est difficile de définir chaque fonction puis de l'écrire.
lambda Par conséquent, il est plus facile d'écrire sur une seule ligne en utilisant lambda.
l = ['A', 'b', 'C', 'd', 'e', 'F', 'g']
def change_words(words, func):
for word in words:
print(func(word))
change_words(l, lambda word: word.capitalize())
change_words(l, lambda word: word.lower())
Même si vous exécutez cela, le même résultat sera affiché.
Si la fonction est utilisée comme argument, elle peut être définie dans () en utilisant lambda. Parce que vous n'avez pas besoin de définir une fonction avec def Il permet d'écrire des programmes très efficaces.
Ci-dessous, le contenu de vos commentaires a été reflété dans l'article.
Combinez le lambda décrit ci-dessus avec la carte et le filtre des fonctions intégrées Il sera plus efficace à utiliser.
Utilisons la fonction de carte ici.
Lorsqu'il est réellement combiné avec la carte
Contenu qui change de mot selon la définition de func
La fonction change_words
n'a plus besoin d'être définie dans def.
l = ['A', 'b', 'C', 'd', 'e', 'F', 'g']
change_words = map(lambda c: c.capitalize(), l)
print(list(change_words)
Jusqu'à présent, nous avons expliqué comment gérer les lambdas et les cartes. Le livre Effective Python recommande l'utilisation de la notation d'inclusion de liste à la place de celles-ci. (* Voir l'élément 7 à la page 15 pour plus de détails.)
Ce qui suit est le programme lorsque la notation d'inclusion de liste est utilisée.
l = ['A', 'b', 'C', 'd', 'e', 'F', 'g']
change_words = [c.capitalize() for c in l]
print(change_words)
Dans mon livre, il y a deux raisons principales pour recommander la notation d'inclusion de liste.
La notation d'inclusion de liste utilise des expressions lambda supplémentaires par rapport aux fonctions intégrées map et filter Il est déclaré clair car il n'est pas nécessaire.
Certes, même si vous regardez le programme ci-dessus, la notation d'inclusion de liste est meilleure Cela a l'air soigné et je pense que c'est facile à décrire.
Par exemple, supposons que vous souhaitiez afficher uniquement «B» en majuscule dans une liste.
Dans la notation d'inclusion de liste, cela est possible en ajoutant simplement une instruction conditionnelle après la boucle.
l = ['A', 'b', 'C', 'd', 'e', 'F', 'g']
change_words = [c.capitalize() for c in l if c == 'b']
print(change_words)
Cependant, dans le cas de la carte, il ne peut pas être décrit sans l'aide d'un filtre.
l = ['A', 'b', 'C', 'd', 'e', 'F', 'g']
change_words = map(lambda c: c.capitalize(), filter(lambda c: c == 'b', l))
print(list(change_words))
Vous pouvez le faire avec un filtre, mais ce n'est pas un programme très lisible.
Des points de vue ci-dessus, il est dit que la notation d'inclusion de liste est meilleure que la carte et le filtre.
Au début, le guide était uniquement pour lambda, mais après avoir reçu des commentaires, J'ai pu me plonger dans la notation d'inclusion de carte, de filtre et même de liste. Merci beaucoup.
Recommended Posts