2013-02-20 5 views

Odpowiedz

19

Można to zrobić poprzez rejestrację specjalnego formatowania wyświetlania wskazówki:

In [1]: formatter = get_ipython().display_formatter.formatters['text/plain'] 

In [2]: formatter.for_type(int, lambda n, p, cycle: p.text("%X" % n)) 
Out[2]: <function IPython.lib.pretty._repr_pprint> 

In [3]: 1 
Out[3]: 1 

In [4]: 100 
Out[4]: 64 

In [5]: 255 
Out[5]: FF 

Jeśli chcesz to zawsze na, można utworzyć plik w $(ipython locate profile)/startup/hexints.py z pierwszych dwóch linii (lub jednego celu uniknięcia wszelkie przypisania):

get_ipython().display_formatter.formatters['text/plain'].for_type(int, lambda n, p, cycle: p.text("%X" % n)) 

, które będą wykonywane za każdym razem, gdy uruchomi się program IPython.

+0

Idealny. Dokładnie to, czego szukałem. Wielkie dzięki! – geschema

+2

Jeszcze lepiej: wydrukuj obie reprezentacje! 'formatter.for_type (int, lambda n, p, cycle: p.text ("% d (0x% X) "% (n, n)))' –

+0

Ta sugestia jest niesamowita, pozwoli zaoszczędzić mi skumulowanych godzin pisania " hex (...) ', aby uzyskać wyniki w formacie szesnastkowym. – wump

1

podstawie minrk's answer i rjb's answer na inne pytanie, kładę to w moim pliku startowego Python:

def hexon_ipython(): 
    '''To print ints as hex, run hexon_ipython(). 
    To revert, run hexoff_ipython(). 
    ''' 
    formatter = get_ipython().display_formatter.formatters['text/plain'] 
    formatter.for_type(int, lambda n, p, cycle: p.text("0x%x" % n)) 


def hexoff_ipython(): 
    '''See documentation for hexon_ipython().''' 
    formatter = get_ipython().display_formatter.formatters['text/plain'] 
    formatter.for_type(int, lambda n, p, cycle: p.text("%d" % n)) 


hexon = hexon_ipython 
hexoff = hexoff_ipython 

więc można go używać tak:

In [1]: 15 
Out[1]: 15 

In [2]: hexon() 

In [3]: 15 
Out[3]: 0xf 

In [4]: hexoff() 

In [5]: 15 
Out[5]: 15