Maison > développement back-end > Tutoriel Python > Pourquoi la compréhension de liste de Python 2 relie-t-elle les noms en dehors de sa portée ?

Pourquoi la compréhension de liste de Python 2 relie-t-elle les noms en dehors de sa portée ?

Patricia Arquette
Libérer: 2024-11-29 12:41:10
original
346 Les gens l'ont consulté

Why Does Python 2's List Comprehension Rebind Names Outside Its Scope?

Le comportement inattendu des compréhensions de listes : noms de rebond et portée floue

Les compréhensions de listes de Python offrent un moyen concis et pratique de créer des listes, mais ils comportent un piège caché : relier les noms même au-delà de la portée de la compréhension elle-même. En Python 2, ce comportement particulier a été source de frustration et d'erreurs de programmation.

Considérez le code suivant :

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

En Python 2, l'exécution de ce code imprimera de manière inattendue 4 plutôt que "valeur originale." En effet, la compréhension de liste fait fuir la variable de contrôle de boucle x dans la portée environnante, remplaçant sa valeur d'origine.

Ce comportement découle de la façon dont les compréhensions de liste ont été implémentées dans Python 2 : comme une optimisation pour améliorer leur efficacité. Cependant, cela a constitué un problème important pour les programmeurs Python, entraînant des erreurs et de la confusion.

Heureusement, dans Python 3, ce « sale petit secret » a été éliminé. Les compréhensions de listes adoptent désormais la même stratégie d'implémentation que les expressions génératrices, qui utilisent un cadre d'exécution distinct. Par conséquent, dans Python 3, l'extrait de code ci-dessus imprime correctement la « valeur originale » comme prévu, car le x dans la compréhension n'éclipse pas le x dans la portée environnante.

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

"[Nous avons effectué ce changement pour] corriger le 'sale petit secret' de la compréhension des listes en utilisant la même stratégie de mise en œuvre que pour les expressions génératrices.

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