Python Language Variable de fuite dans les listes compréhensibles et pour les boucles


Exemple

Considérer la compréhension de liste suivante

Python 2.x 2.7
i = 0
a = [i for i in range(3)]
print(i) # Outputs 2

Cela se produit uniquement dans Python 2 en raison du fait que la compréhension de la liste «fuit» la variable de contrôle de la boucle dans la portée environnante ( source ). Ce comportement peut conduire à des bogues difficiles à trouver et a été corrigé dans Python 3 .

Python 3.x 3.0
i = 0
a = [i for i in range(3)]
print(i) # Outputs 0

De même, pour les boucles n'ont pas de portée privée pour leur variable d'itération

i = 0
for i in range(3):
    pass
print(i) # Outputs 2

Ce type de comportement se produit à la fois dans Python 2 et Python 3.

Pour éviter les problèmes avec les variables qui fuient, utilisez les nouvelles variables dans les listes compréhensibles et les boucles, le cas échéant.