我在Python控制台上做了很多工作,其中大部分都是指地址,我更喜欢用十六进制来看。
因此,如果a = 0xBADF00D
,当我只是在控制台中输入Python> a
来查看其值时,我更愿意使用python来回复0xBADF00D
而不是195948557
。
我知道我可以输入'0x%X' % a
以十六进制查看它,但我正在寻找某种python控制台选项让它自动执行此操作。有什么事情存在吗?谢谢!
答案 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
的返回类型是字符串还是数字,如果是,则打印十六进制值,否则正常打印该值。