22 votes

Embellissez l'impression par défaut dans le REPL Python

Comment puis-je activer l'affichage formaté sur le REPL par défaut?

Actuellement, je le fais en utilisant la fonction pprint.pprint().

>>> pprint.pprint(data)
{'SHIP_CATEGORY': '',
 'SHIP_QUANTITY': 1,
 'SHIP_SEPARATELY': 0,
 'SHIP_SUPPLEMENT': 0,
 'SHIP_SUPPLEMENT_ONCE': 0,
 'THUMBNAIL': ''}

Mais je veux l'affichage formaté par défaut

>>> data
{'SHIP_CATEGORY': '',
 'SHIP_QUANTITY': 1,
 'SHIP_SEPARATELY': 0,
 'SHIP_SUPPLEMENT': 0,
 'SHIP_SUPPLEMENT_ONCE': 0,
 'THUMBNAIL': ''}

Qu'est-ce que j'ai essayé?
J'ai recherché sur Google. Je n'ai rien trouvé, la plupart des résultats renvoient au module pprint.

27voto

falsetru Points 109148

Utilisez sys.displayhook

import pprint
import sys

orig_displayhook = sys.displayhook

def myhook(value):
    if value != None:
        __builtins__._ = value
        pprint.pprint(value)

__builtins__.pprint_on = lambda: setattr(sys, 'displayhook', myhook)
__builtins__.pprint_off = lambda: setattr(sys, 'displayhook', orig_displayhook)

Placez le code ci-dessus dans PYTHONSTARTUP si vous ne voulez pas taper à chaque fois que vous exécutez l'interpréteur interactif.

Utilisation:

>>> data = dict.fromkeys(range(10))
>>> data
{0: None, 1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None}
>>> pprint_on()
>>> data
{0: None,
 1: None,
 2: None,
 3: None,
 4: None,
 5: None,
 6: None,
 7: None,
 8: None,
 9: None}
>>> pprint_off()
>>> data
{0: None, 1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None}

11voto

Ashwini Chaudhary Points 94431

Utilisez IPython shell:

In [10]: data = {'SHIP_CATEGORY': '',  'SHIP_QUANTITY': 1, 'SHIP_SEPARATELY': 0, 'SHIP_SUPPLEMENT': 0, 'SHIP_SUPPLEMENT_ONCE': 0,}

In [11]: data
Out[11]: 
{'SHIP_CATEGORY': '',
 'SHIP_QUANTITY': 1,
 'SHIP_SEPARATELY': 0,
 'SHIP_SUPPLEMENT': 0,
 'SHIP_SUPPLEMENT_ONCE': 0}

Il a aussi une option --no-pprint au cas où vous voulez désactiver cet affichage joli.

IPython shell a également des fonctionnalités comme l'auto-complétion, coller sur plusieurs lignes, exécuter des commandes shell, etc. Donc, c'est bien mieux que le shell python normal.

3voto

Erock618 Points 53

Basé sur la réponse acceptée de falsetru, mais sous forme d'une seule ligne:

from pprint import pprint
import sys

sys.displayhook = lambda x: exec(['_=x; pprint(x)','pass'][x is None])

et pour revenir en arrière (basé sur le commentaire de kyrill):

sys.displayhook = sys.__displayhook__

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X