Maison > développement back-end > Tutoriel Python > Pourquoi la compréhension de ma liste Python modifie-t-elle la valeur de ma variable ?

Pourquoi la compréhension de ma liste Python modifie-t-elle la valeur de ma variable ?

Susan Sarandon
Libérer: 2024-11-29 12:08:11
original
937 Les gens l'ont consulté

Why Does My Python List Comprehension Change My Variable's Value?

Comportement inattendu : les compréhensions de listes modifient la portée des variables

Les compréhensions de listes Python sont des outils puissants pour la manipulation des données, mais elles comportent une bizarrerie cachée qui peut conduire à un comportement inattendu.

Le Problème

Dans Python 2 (et versions antérieures), les compréhensions de liste peuvent « relier » la variable de contrôle de boucle à la dernière valeur de la boucle, même après la fin de la portée de la compréhension. Cela peut entraîner un comportement surprenant :

x = "original value"
squares = [x**2 for x in range(5)]
print(x)  # Prints 4 in Python 2!
Copier après la connexion

Dans cet exemple, la variable de contrôle de boucle x est réaffectée à la dernière valeur de la boucle (4) dans la compréhension de la liste. Cela signifie que lorsque print(x) est appelé en dehors de la compréhension, il imprime 4 au lieu de "valeur originale".

Explication

Le comportement décrit ci-dessus est un résultat de la manière dont les compréhensions de listes ont été initialement implémentées dans Python 2. Pour rendre les compréhensions de listes aussi efficaces que possible, la variable de contrôle de boucle a été divulguée dans le système environnant. scope.

Correction Python 3

Dans Python 3, ce comportement a été modifié. Les compréhensions de liste ne relient plus la variable de contrôle de boucle en dehors de la compréhension. Cela a été fait pour améliorer la cohérence entre les compréhensions de liste et les expressions génératrices, qui ne relient jamais la variable de contrôle de boucle.

Explication de Guido van Rossum

Guido van Rossum, le créateur de Python, a expliqué le raisonnement derrière ce changement dans Python 3 :

"Nous avons décidé de corriger le "sale petit secret" de compréhensions de liste en utilisant la même stratégie d'implémentation que pour les expressions génératrices. Ainsi, dans Python 3, l'exemple ci-dessus... affichera « avant », prouvant que le « x » dans la compréhension de liste masque temporairement mais ne remplace pas le « » x' dans le périmètre environnant."

Conclusion

Bien que le comportement des compréhensions de listes puisse sembler contre-intuitif au début, il est important de comprendre comment ils fonctionnent à la fois dans Python 2 et Python 3. Ces connaissances vous aideront à éviter les bugs potentiels et à écrire du code plus robuste.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal