Python控制台默认十六进制显示
我在Python控制台中做了大量的工作,其中大部分是指地址,我更喜欢用十六进制表示 因此,如果Python控制台默认十六进制显示,python,Python,我在Python控制台中做了大量的工作,其中大部分是指地址,我更喜欢用十六进制表示 因此,如果a=0xBADF00D,当我只需在控制台中输入Python>a查看其值时,我更希望Python使用0xBADF00D而不是195948557进行回复 我知道我可以输入'0x%X'%a以十六进制显示它,但我正在寻找某种python控制台选项,让它自动执行此操作。像这样的东西存在吗?谢谢 常规Python解释器将调用sys.displayhook来实际显示您输入的表达式。您可以将其替换为能够准确显示所需内容
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'
不过,我怀疑您很快就会厌倦将所有整数都视为十六进制,并相应地切换到显式转换希望将其视为十六进制的整数。您可以这样做:
while True:
print hex(input('> '))
获取打印所有结果十六进制值的基本提示。您甚至可以将其设置为有条件的——检查
输入的返回类型是否为字符串或数字,如果是,则打印十六进制值,否则正常打印值。类似的内容,也许
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
版本的方法,例如\uuuu add\uuu()
,\uu sub\uu()
,等等。,这样他们将返回HexInt
s.修改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
在前面的答案的基础上,这里有一个适用于Python 2/3的版本,它不将布尔值显示为十六进制,还正确设置了\ucode>变量:
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__
我认为这是不可能的。但您可以使用hex
使格式更具可读性。可以将整数打印为小数和十六进制。分别添加简单的enahex()和dishex()来设置和恢复displayhook,这样可以方便地来回切换。谢谢这是难以置信的酷,您可以覆盖提示显示对象的方式。很好的回答我不得不删除行\uuuu内置的
,因为它总是抛出AttributeError:“dict”对象没有属性“\uu”
,但是没有那行它工作得很好。请注意,这将显示bool
为十六进制。我不认为这比仅仅执行hex(12345)
等操作有什么改进。这样的回答。非常好。非常有用。哇!