Re: Python lambda est inutile ^ H ^ H ^ H ^ H ^ H Difficile à utiliser

En réponse à l'article écrit par @buchio Python lambda est inutile ^ H ^ H ^ H ^ H ^ H difficile à utiliser regarder.

Pourquoi c'est arrivé

Il est facile de comprendre la variable locale si vous pensez que la zone est réservée derrière elle. La référence dans le lambda est la zone, pas la valeur de la variable (visible au moment de la définition). En d'autres termes, test1 dans l'article d'origine est équivalent au code ci-dessous.

>>> def test1_aux():
...     env = [None]
...     funcs = []
...     for i in range(10):
...         env[0] = i
...         funcs.append(lambda a: a+env[0])
...     return funcs
... 
>>> print [f(10) for f in test1_aux()]
[19, 19, 19, 19, 19, 19, 19, 19, 19, 19]

Le fait que la portée de la variable i ne se limite pas à l'intérieur de l'instruction for est certainement un peu déroutant, mais je ne pense pas qu'il y ait autre chose d'étrange à ce sujet.

À propos, pour la notation d'inclusion de liste, qui est étroitement liée à l'instruction for, les variables ne peuvent plus être référencées à partir de la portée externe de Python 3.

python2


>>> [x for x in range(3)]
[0, 1, 2]
>>> x
2

python3


>>> [x for x in range(3)]
[0, 1, 2]
>>> x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined

Que devrais-je faire

En Python, vous pouvez l'appeler en implémentant la méthode \ _ \ _ call \ _ \ _ dans n'importe quelle classe. Ainsi, vous pouvez utiliser l'objet là où vous avez besoin de la fermeture.

>>> class Adder(object):
...     def __init__(self, i):
...         self.i = i
...     def __call__(self, a):
...         return a + self.i
... 
>>> def test_callable():
...     funcs = []
...     for i in range(10):
...         funcs.append(Adder(i))
...     return funcs
... 
>>> print [f(10) for f in test_callable()]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

En Python, l'utilisation de fonctions et d'objets est plus lisible et plus simple, il est donc plus pythonique d'utiliser des lambdas pour autre chose que de simples expressions.

Recommended Posts

Re: Python lambda est inutile ^ H ^ H ^ H ^ H ^ H Difficile à utiliser
Comment utiliser Python lambda
[Route vers Python intermédiaire] Utiliser des expressions lambda
Comment utiliser is et == en Python
Résumé de l'étude de Python pour utiliser AWS Lambda
Créer un outil de génération de documents Python car il est difficile d'utiliser sphinx
python3: Comment utiliser la bouteille (2)
[Python] Comment utiliser la liste 1
Python est douloureux. Mais utilisez
Comment utiliser Python Argparse
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] Je souhaite utiliser l'option -h avec argparse
[Présentation de l'application Udemy Python3 +] 58. Lambda
Python: comment utiliser async avec
Golang est difficile à traduire. .. .. (Partie 1)
Utilisez le tissu tel quel en python (fabric3)
[Python] Comment utiliser la série Pandas
Comment utiliser les requêtes (bibliothèque Python)
Comment utiliser SQLite en Python
[Lambda] [Python] Publier sur Twitter depuis Lambda!
Grammaire de base du système Python3 (comment utiliser les fonctions, la fermeture, la fonction lambda)
Comment utiliser l'astérisque (*) en Python. C'est peut-être tout? ..
[Introduction à Python] Utilisons les pandas
[Python] Comment utiliser la liste 3 Ajouté
Comment utiliser Mysql avec python
Comment utiliser l'API Python d'OpenPose
Comment utiliser ChemSpider en Python
Python: Comment utiliser pydub (lecture)
[Introduction à Python] Utilisons les pandas
Comment utiliser la fonction zip de python
Utiliser PostgreSQL avec Lambda (Python + psycopg2)
[Introduction à Python] Utilisons les pandas
[Python] Comment utiliser l'API Typetalk
Lorsque vous souhaitez l'utiliser tel quel lorsque vous l'utilisez avec lambda memo
Utilisation pratique des couches lors du chargement de bibliothèques sur Lambda
[Python] Résumé de l'utilisation des pandas
[Introduction à Python] Comment utiliser la classe en Python?
Utiliser l'impression dans l'expression lambda Python2
N'est-il pas recommandé d'utiliser pip directement?
[Route vers Python intermédiaire] Utiliser des opérateurs ternaires
Comment installer et utiliser pandas_datareader [Python]
[Pandas] Qu'est-ce que set_option [Comment utiliser]
[python] Comment utiliser __command__, explication des fonctions
Je veux utiliser jar de python
[Introduction à Python] Utilisons foreach avec Python
[Python] Comment utiliser import sys sys.argv
Un moyen simple d'utiliser Wikipedia avec Python
[Python] Organisation de l'utilisation des instructions
Fonction Lambda pour effectuer une sauvegarde AMI (python)
python: Comment utiliser les locals () et globals ()
Installez python sur xserver pour utiliser pip
Comment utiliser "deque" pour les données Python
Comment utiliser le zip Python et énumérer
[Python] Comprendre comment utiliser les fonctions récursives