Python 命令行里显示十六进制

0x0 问题

Python 命令行经常被拿来当作计算器,进行数字或者逻辑运算。很多时候,特别是在编程时,往往需要以十六进制的方式来显示运算的结果,这时,通常需要额外调用 hex() 函数,或者按 {:x}.format(123) 格式打印出来。

这些操作多了以后,就会觉得很麻烦。所以有必要让 Python 命令行能默认地输出十六进制的结果。

0x1 解决办法

其实,Python 的 sys 标准模块里,提供了 displayhook,对于数字如何显示,可以添加自定义的操作。

比如添加 hex.py 文件如下:

import sys

def _displayhook(o):
    if type(o).__name__ in ('int', 'long'):
        print(hex(o))
    else:
        sys.__displayhook__(o)

def hexon():
    sys.displayhook = _displayhook

def hexoff():
    sys.displayhook = sys.__displayhook__

然后运行 python3 -i hex.py 进入命令行。这时,如果需要以十六进制方式显示数字,只需要在执行 hexon() 即可开启。

0x2 参考资料

  • https://docs.python.org/3/library/sys.html#sys.displayhook
  • Python console default hex display @ https://stackoverflow.com/questions/6307433/python-console-default-hex-display
  • Digit grouping in python hexadecimal number formatting @ https://stackoverflow.com/questions/56132859/digit-grouping-in-python-hexadecimal-number-formatting

Read More: