Sam & Max Sam & Max
Menu
Recherche
Le _ (underscore) dans le shell interactif Python

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.

Articles similaires:

  1. Qu’est-ce qu’une closure en Python et Javascript ?
  2. htop – un visualiseur interactif de process
  3. Comprendre les décorateurs Python pas à pas (partie 1)
  4. Astuces Python en vrac
  5. Python love: les listes en intention (partie 1)

flattr this!

arrow12 commentaires

  1. 8 moiss plus tôt

    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$

  2. Sam
    Sam
    8 moiss plus tôt

    Ca marche pas chez moi ton deuxième truc. Ca demande une config .bashrc particulière ?

    Moi par contre ça marche avec cd -.

  3. 8 moiss plus tôt

    nan c’est du bash ; le cd – c’est pour retourner à $OLDPWD et $_ contient le dernier argument de la ligne précédente

  4. Baronsed
    8 moiss plus tôt

    J’ai du mal avec le man de bash. C’est quoi la différence avec !$, alors ?

  5. foxmask
    8 moiss plus tôt

    ya pas !$ c’est $! qui est le process ID

  6. Baronsed
    8 moiss plus tôt

    Non, le pid, c’est $$ (ou $BASHPID). !$ et $_ semblent faire la même chose.

  7. 8 moiss plus tôt

    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

  8. 8 moiss plus tôt

    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 :

    for _ in xrange(3):
        print "Patimbert !!!"

    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 …

  9. foxmask
    8 moiss plus tôt

    c’est corrigé
    merci

  10. Sam
    Sam
    8 moiss plus tôt

    Foxmask, correcteur intrépide !

  11. foxmask
    8 moiss plus tôt

    toute en discrétion :-) je n’ai pas touché à l’url par contre sinon tout lien existant produirait une 404 .

  12. Sam
    Sam
    8 moiss plus tôt

    Et j’ai apprécie de bout en bout cette prestation.

Laisser un commentaire