_
est une variable spéciale de l'interprète, il est toujours affecté le résultat de l'expression précédente. Donc, vous shoudn pas l'utiliser comme ça.
BTW, le problème semble être lié à IPython shell, parce que votre code fonctionne très bien en normal python shell:
Normal python shell lorsque vous affecter quoi que ce soit à la variable _
, puis il va rester affectée à cet objet, et il perd des comportements particuliers.
Python shell:
>>> 2*2
4
>>> _ #works as expected
4
>>> _ = 2 #after assignment, it's magic functionality is gone
>>> _*5
10
>>> _
2
IPython shell:
Dans IPython _
se comporte différemment de python, shell _
; même si vous pouvez l'affecter à une variable puis aussi il va être mis à jour dès que vous faites un peu de calcul.
In [1]: 2*2
Out[1]: 4
In [2]: _
Out[2]: 4
In [3]: _ = 10
In [4]: _*10
Out[4]: 100
In [5]: _
Out[5]: 100
De IPython de docs:
Les variables GLOBALES suivantes existent toujours (afin de ne pas les écraser
eux!):
_ : (un seul trait de soulignement) : stocke la sortie précédente, comme Python
par défaut interprète.
..
À partir de python docs:
L'identificateur spécial _
est utilisé dans l'interpréteur interactif
stocker le résultat de la dernière évaluation; il est stocké dans le
__builtin__
module. Lorsqu'il n'est pas en mode interactif, _
n'a pas de signification particulière et n'est pas défini.
Remarque: Le nom de l' _
est souvent utilisé en conjonction avec l'internationalisation; reportez-vous à la documentation de l'gettext
module pour plus d'informations sur cette convention.