如何配置ipython以十六进制格式显示整数?

ges*_*ema 14 python ipython

这是默认行为:

In [21]: 255
Out[21]: 255
Run Code Online (Sandbox Code Playgroud)

这就是我想要的:

In [21]: 255
Out[21]: FF
Run Code Online (Sandbox Code Playgroud)

我可以设置ipython吗?

min*_*nrk 22

您可以通过为int注册特殊的显示格式化器来完成此操作:

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
Run Code Online (Sandbox Code Playgroud)

如果你想要这个永远在线,你可以$(ipython locate profile)/startup/hexints.py用前两行创建一个文件(或者作为一个文件以避免任何分配):

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

每次启动IPython时都会执行.

  • 更好:打印两种表示!`formatter.for_type(int,lambda n,p,cycle:p.text("%d(0x%X)"%(n,n)))` (2认同)

wja*_*rea 5

根据minrk 的回答rjb对另一个问题的回答,我将其放入我的 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
Run Code Online (Sandbox Code Playgroud)

所以我可以这样使用它:

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

In [2]: hexon()

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

In [4]: hexoff()

In [5]: 15
Out[5]: 15
Run Code Online (Sandbox Code Playgroud)