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

时间:2011-06-10 14:03:38

标签: python

我在Python控制台上做了很多工作,其中大部分都是指地址,我更喜欢用十六进制来看。

因此,如果a = 0xBADF00D,当我只是在控制台中输入Python> a来查看其值时,我更愿意使用python来回复0xBADF00D而不是195948557

我知道我可以输入'0x%X' % a以十六进制查看它,但我正在寻找某种python控制台选项让它自动执行此操作。有什么事情存在吗?谢谢!

5 个答案:

答案 0 :(得分:18)

常规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'

我怀疑你很快就会厌倦将所有整数视为十六进制,然后转而显式转换你想要看作十六进制的那些整数。

答案 1 :(得分:3)

基于之前的答案,这里有一个适用于Python 2/3的版本,不会将bools显示为十六进制,还可以正确设置_变量:

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__

答案 2 :(得分:1)

也许是这样的事情?

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 s。

答案 3 :(得分:1)

修改python3的顶级python2答案......

def display_as_hex(item):
    if isinstance(item, int):
        print(hex(item))
    else:
        print(repr(item))
import sys
sys.displayhook = display_as_hex

答案 4 :(得分:0)

你可以这样:

while True:
  print hex(input('> '))

获取打印所有结果的十六进制值的基本提示。您甚至可以使其成为条件 - 检查input的返回类型是字符串还是数字,如果是,则打印十六进制值,否则正常打印该值。