我在Python控制台上进行了大量的工作,其中大部分涉及地址,我希望看到它们的十六进制形式。
所以如果a = 0xBADF00D
,当我仅输入Python> a
来查看其值时,我希望Python回复0xBADF00D
而不是195948557
。
我知道我可以输入'0x%X' % a
以以十六进制方式查看它,但我正在寻找一种Python控制台选项,使其自动执行此操作。是否存在像这样的东西?谢谢!
我在Python控制台上进行了大量的工作,其中大部分涉及地址,我希望看到它们的十六进制形式。
所以如果a = 0xBADF00D
,当我仅输入Python> a
来查看其值时,我希望Python回复0xBADF00D
而不是195948557
。
我知道我可以输入'0x%X' % a
以以十六进制方式查看它,但我正在寻找一种Python控制台选项,使其自动执行此操作。是否存在像这样的东西?谢谢!
常规的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'
我怀疑你很快就会厌倦看到所有的整数都以十六进制表示,因此你需要根据需要显式地将要看到的整数转换为十六进制。
在之前的答案基础上,这里提供适用于Python 2/3的版本,不会将bool值显示为十六进制,并且还可以正确设置_
变量:
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__
__builtins__._ = o
,因为它总是会抛出异常信息AttributeError:'dict' object has no attribute '_'
, 但是没有了这行代码,现在已经很好地工作了。 - jangxxclass 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
。hex(12345)
更好。 - Craig McQueen修改顶部的Python2答案以适用于Python3...
def display_as_hex(item):
if isinstance(item, int):
print(hex(item))
else:
print(repr(item))
import sys
sys.displayhook = display_as_hex
while True:
print hex(input('> '))
要获得一个基本提示,打印出所有结果的十六进制值。你甚至可以将其设置为条件性的——检查input
的返回类型是字符串还是数字,如果是,则打印十六进制值,否则正常打印该值。
hex
来使格式更易读。 - user395760