Je suis actuellement en train de convertir un script de Python 2 à Python 3. En le déboguant, je suis tombé sur une partie du code qui se comporte différemment entre les deux versions. Cependant, je ne peux pas expliquer cette différence.
Voici un reproducer:
variable_1 = "x"
variable_2 = "y"
list_of_variables = ['variable_1', 'variable_2']
existing_variables = vars()
print([variable for variable in list_of_variables if variable in vars()])
print([variable for variable in list_of_variables if variable in existing_variables])
Python 2.7.18 affiche la sortie suivante:
['variable_1', 'variable_2']
['variable_1', 'variable_2']
Tandis que Python 3.9.0 affiche:
[]
['variable_1', 'variable_2']
Pourquoi la première compréhension de liste ne fonctionne pas en Python 3? Et pourquoi fonctionne-t-elle lorsqu'on stocke le contenu de vars()
dans une variable?