Python控制台默认十六进制显示

12 投票
5 回答
6557 浏览
提问于 2025-04-16 19:19

我在Python控制台里做一些工作,大部分是跟地址有关的,我希望能看到十六进制的表示方式。

比如说,如果我有一个变量a = 0xBADF00D,当我在控制台输入Python> a想查看它的值时,我希望Python能直接回复0xBADF00D,而不是195948557

我知道可以用'0x%X' % a来查看十六进制的值,但我想找一个Python控制台的选项,让它自动这样做。有没有类似的功能呢?谢谢!

5 个回答

3

可能像这样吧?

class HexInt(int):
    "Same as int, but __repr__() uses hex"

    def __repr__(self):
        return hex(self)

所以你会在创建所有想要以十六进制显示的整数时使用这个。

举个例子:

>>> a = HexInt(12345)
>>> b = HexInt(54321)
>>> a
0x3039
>>> b
0xd431
>>> c = HexInt(a + b)
>>> c
0x1046a

注意,如果你想在进行加减运算时跳过明确创建一个新的 HexInt,你需要重写现有的 int 方法,比如 __add__()__sub__() 等,让它们返回 HexInt 类型的结果。

5

在之前的回答基础上,这里有一个适用于Python 2和3的版本,它不会把布尔值显示成十六进制,并且还正确设置了_这个变量:

import sys

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

def hexon():
    sys.displayhook = _displayhook
def hexoff():
    sys.displayhook=sys.__displayhook__
24

普通的Python解释器会调用 sys.displayhook 来显示你输入的表达式。你可以把它换成其他的东西,来显示你想要的内容,但要记住,它会对交互式解释器想要显示的所有表达式都进行调用:

>>> import sys
>>> 1
1
>>> "1"
'1'
>>> def display_as_hex(item):
...     if isinstance(item, (int, long)):
...         print hex(item)
...     else:
...         print repr(item)
...
>>> sys.displayhook = display_as_hex
>>> 1
0x1
>>> "1"
'1'

不过,我想你很快就会厌倦看到所有整数都是十六进制的,可能会选择只把你想要的那些整数转换成十六进制来显示。

撰写回答