Comment utiliser Python lambda

introduction

Lorsque vous entendez lambda, vous pourriez penser à AWS lambda, Cette fois, je parle de lambda, ce qui signifie une fonction anonyme en Python.

Qu'est-ce que Python lambda?

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

Comment utiliser

Décrit comment utiliser ce lambda.

déclaration def

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.

Il vaut mieux ne pas donner de nom à l'expression lambda

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.

Plus efficacement

Pour ressentir davantage l'effet de lambda Ajoutons maintenant une fonction qui corrige l'alphabet aux rangs inférieurs.

déclaration def

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.

Postscript

Ci-dessous, le contenu de vos commentaires a été reflété dans l'article.

Combinons avec carte et filtre

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)

Utilisez autant que possible la notation d'inclusion de liste

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.

Le premier est la lisibilité.

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.

Deuxièmement, la notation d'inclusion de liste facilite l'extraction d'éléments de la liste d'entrée.

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.

en conclusion

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

Comment utiliser Python lambda
python3: Comment utiliser la bouteille (2)
[Python] Comment utiliser la liste 1
Python: comment utiliser pydub
[Python] Comment utiliser checkio
[Python] Comment utiliser input ()
[Python] Comment utiliser virtualenv
python3: Comment utiliser la bouteille (3)
python3: Comment utiliser la bouteille
Comment utiliser les octets Python
Python: comment utiliser async avec
[Python] Comment utiliser la série Pandas
Comment utiliser Mysql avec python
Comment utiliser l'API Python d'OpenPose
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
Comment utiliser la fonction zip de python
[Python] Comment utiliser l'API Typetalk
Comment utiliser xml.etree.ElementTree
Comment utiliser Python-shell
[Python] Résumé de l'utilisation des pandas
[Introduction à Python] Comment utiliser la classe en Python?
Remarques sur l'utilisation de tf.data
Comment utiliser virtualenv
Comment utiliser Seaboan
Comment utiliser la correspondance d'image
Comment installer Python
Comment utiliser Pandas 2
Comment installer et utiliser pandas_datareader [Python]
Comment utiliser Virtualenv
Comment utiliser pytest_report_header
[python] Comment utiliser __command__, explication des fonctions
Comment installer python
Comment utiliser Bio.Phylo
Comment utiliser SymPy
[Python] Comment utiliser import sys sys.argv
Comment utiliser x-means
Comment utiliser WikiExtractor.py
Comment utiliser IPython
Mémorandum sur l'utilisation du python gremlin
Comment utiliser virtualenv
[Python2.7] Résumé de l'utilisation d'unittest
Comment utiliser Matplotlib
Comment accéder à RDS depuis Lambda (python)
Comment utiliser iptables
python: Comment utiliser les locals () et globals ()
Comment utiliser numpy
Comment utiliser __slots__ dans la classe Python
Comment utiliser TokyoTechFes2015
Comment utiliser venv
Comment utiliser le dictionnaire {}
Comment utiliser Pyenv
Comment utiliser "deque" pour les données Python
Comment utiliser python-kabusapi
Comment utiliser le zip Python et énumérer
Résumé de l'utilisation de la liste Python
[Route vers Python intermédiaire] Utiliser des expressions lambda
Comment utiliser les expressions régulières en Python
Comment utiliser le retour