C’est une fonctionnalité que peu de gens connaissent, pourtant très utile.
Dans le shell Python, à chaque fois qu’on évalue une expression, le résultat affiché est référencé dans la variable _
.
>>> 1 + 1 2 >>> print _ 2 |
On peut évidement la réutiliser comme n’importe quelle variable:
>>> range(5) [0, 1, 2, 3, 4] >>> [x * 2 for x in _] [0, 2, 4, 6, 8] |
Pour éviter d’effacer la variable trop souvent, quand le résultat retourné est None
, _
ne change pas, donc il ne change pas quand on print
:-)
>>> 1 > 2 or None >>> _ [0, 2, 4, 6, 8] >>> print 'a' a >>> _ [0, 2, 4, 6, 8] |
Ça ne marche que dans le shell, pas dans un script.
j’ai découvert ça avec les présentations de Aymeric Augustin “Django et Python 3” – pratique :)
dans la même veine du underscore magique ya
foxmask@localhost:~$ mkdir sam_et_max
foxmask@localhost:~$ cd $_
foxmask@localhost:~/sam_et_max$
foxmask@localhost:~/sam_et_max$ cd ..
foxmask@localhost:~$ mkdir sam et_max
foxmask@localhost:~$ cd $_
foxmask@localhost:~/et_max$
Ca marche pas chez moi ton deuxième truc. Ca demande une config .bashrc particulière ?
Moi par contre ça marche avec
cd -
.nan c’est du bash ; le cd – c’est pour retourner à $OLDPWD et $_ contient le dernier argument de la ligne précédente
J’ai du mal avec le man de bash. C’est quoi la différence avec !$, alors ?
ya pas !$ c’est $! qui est le process ID
Non, le pid, c’est $$ (ou $BASHPID). !$ et $_ semblent faire la même chose.
Petites précisions :)
le $$ c’est le pid courant
le $! est le PID du process lancé en background
$_ est le dernier paramètre tapé de de la ligne précédente
Cool. Voilà une astuce fun et utile. Merci !
A noter que si on s’amuse à définir soi-même le underscore, ça ne fonctionne plus. (Mais c’est assez normal)
>>> 654
654
>>> _
654
>>> _ = "lol"
>>> _
'lol'
>>> 87542
87542
>>> _
'lol'
Mon ancien maître-ninja python m’avait dit que c’était une bonne pratique d’utiliser le underscore comme compteur de boucle, lorsqu’on n’a pas besoin de sa valeur dans ladite boucle.
Exemple :
Il vaut donc mieux ne pas utiliser cette bonne pratique en mode console.
Et à l’occasion, corrigez la faute dans le titre :
underscode -> underscore.
Les fautes dans un article, ça ne m’a jamais vraiment dérangé. Mais dans le titre, quand même …
c’est corrigé
merci
Foxmask, correcteur intrépide !
toute en discrétion :-) je n’ai pas touché à l’url par contre sinon tout lien existant produirait une 404 .
Et j’ai apprécie de bout en bout cette prestation.