Maison >développement back-end >Tutoriel Python >Pourquoi la portée de compréhension de la liste de Python 2 diffère-t-elle de celle de Python 3 ?
Compréhensions de listes : une source de portée confuse
Un aspect particulier des compréhensions de listes dans Python 2 est leur interaction inhabituelle avec la portée des variables. Plus précisément, la variable de contrôle de boucle d'une compréhension de liste « fuit » dans la portée environnante, entraînant des erreurs potentielles et de la confusion.
Considérez le code suivant :
x = "original value" squares = [x**2 for x in range(5)] print(x) # Prints 4 in Python 2!
En Python 2, ce le code imprimera de manière inattendue 4 au lieu de "valeur originale". En effet, la variable de contrôle de boucle x utilisée dans la compréhension de liste masque temporairement le x défini en dehors de la compréhension. Cette observation persiste même une fois la compréhension terminée.
Ce comportement peut être une source importante de frustration, car il peut introduire des erreurs subtiles et difficiles à déboguer. De plus, cela compromet la commodité et la simplicité généralement associées aux compréhensions de listes.
Dans Python 3, cependant, ce comportement a été corrigé. Les compréhensions de liste ne diffusent plus la variable de contrôle de boucle dans la portée environnante. Cela les aligne sur les expressions génératrices, qui se sont toujours comportées de cette manière.
Selon Guido van Rossum, le créateur de Python, l'implémentation originale des compréhensions de liste qui fuit était un « compromis intentionnel » fait pour optimiser leur performance. Cependant, dans Python 3, ce compromis a été jugé inutile en raison de l'amélioration des performances.
L'élimination de ce comportement de fuite dans Python 3 a considérablement amélioré la fiabilité et la cohérence des compréhensions de listes. En éliminant le risque d'observation involontaire de variables, les programmeurs peuvent désormais les utiliser avec une plus grande confiance.
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!