Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python控制台默认十六进制显示_Python - Fatal编程技术网

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

Python控制台默认十六进制显示,python,Python,我在Python控制台中做了大量的工作,其中大部分是指地址,我更喜欢用十六进制表示 因此,如果a=0xBADF00D,当我只需在控制台中输入Python>a查看其值时,我更希望Python使用0xBADF00D而不是195948557进行回复 我知道我可以输入'0x%X'%a以十六进制显示它,但我正在寻找某种python控制台选项,让它自动执行此操作。像这样的东西存在吗?谢谢 常规Python解释器将调用sys.displayhook来实际显示您输入的表达式。您可以将其替换为能够准确显示所需内容

我在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'

不过,我怀疑您很快就会厌倦将所有整数都视为十六进制,并相应地切换到显式转换希望将其视为十六进制的整数。

您可以这样做:

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)
等操作有什么改进。这样的回答。非常好。非常有用。哇!