2013-02-20 37 views
13

Dưới đây là hành vi mặc định:Làm thế nào tôi có thể cấu hình ipython để hiển thị số nguyên theo định dạng hex?

In [21]: 255 
Out[21]: 255 

Và đây là những gì tôi muốn:

In [21]: 255 
Out[21]: FF 

Tôi có thể thiết lập ipython để làm điều đó?

+2

thể trùng lặp của [bài này] (http://www.stackoverflow.com/q/1187000/20009616). – isedev

+1

Liên quan: [Bảng điều khiển mặc định của bảng điều khiển Python hiển thị] (https://stackoverflow.com/q/6307433/4518341) – wjandrea

Trả lời

19

Bạn có thể làm điều này bằng cách đăng ký một định dạng hiển thị đặc biệt dành cho ints:

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 

Nếu bạn muốn thường xuyên này, bạn có thể tạo một tập tin trong $(ipython locate profile)/startup/hexints.py với hai dòng đầu tiên (hoặc là một trong để tránh bất kỳ bài tập nào):

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

sẽ được thực hiện mỗi khi bạn khởi động IPython.

+0

Hoàn hảo. Chính xác những gì tôi đang tìm kiếm. Cảm ơn rất nhiều! – geschema

+2

Thậm chí tốt hơn: in cả hai biểu diễn! 'formatter.for_type (int, lambda n, p, chu kỳ: p.text ("% d (0x% X) "% (n, n)))' –

+0

Đề xuất này là tuyệt vời, sẽ tiết kiệm cho tôi số giờ tích lũy của việc nhập ' hex (...) 'để có được kết quả theo định dạng hex. – wump

1

Dựa trên minrk's answerrjb's answer về câu hỏi khác, tôi đặt điều này trong tập tin khởi động Python của tôi:

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 

Vì vậy, tôi có thể sử dụng nó như thế này:

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

In [2]: hexon() 

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

In [4]: hexoff() 

In [5]: 15 
Out[5]: 15 
Các vấn đề liên quan