【问题标题】:Python console default hex displayPython 控制台默认十六进制显示
【发布时间】:2011-09-12 12:58:36
【问题描述】:

我在 Python 控制台中做了很多工作,其中大部分是指地址,我希望看到的是十六进制。

所以如果a = 0xBADF00D,当我简单地在控制台中输入Python> a 来查看它的值时,我更喜欢python 回复0xBADF00D 而不是195948557

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

【问题讨论】:

  • 我认为这不可能。但是您可以使用hex 使格式更具可读性。

标签: python read-eval-print-loop


【解决方案1】:

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

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

【讨论】:

  • 可以将整数打印为小数十六进制。
  • 添加一个简单的 enahex() 和 discex() 分别设置和恢复显示挂钩,可以轻松地来回切换。谢谢!
  • 您可以覆盖提示显示对象的方式,这真是太酷了。不错的答案
【解决方案2】:

在以前的答案的基础上,这是一个适用于 Python 2/3 的版本,不会将布尔值显示为十六进制,并且还正确设置了 _ 变量:

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 '_',但没有那行它工作得很好。
【解决方案3】:

大概是这样的吧?

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__() 等。 ,这样他们就会返回HexInts。

【讨论】:

  • 我看不出这比只做hex(12345) 等有什么改进。
【解决方案4】:

正在修改 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

【讨论】:

  • 注意,这会将bool 显示为十六进制。
【解决方案5】:

你可以这样:

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

获得打印所有结果的十六进制值的基本提示。你甚至可以让它有条件——检查input的返回类型是字符串还是数字,如果是,打印十六进制值,否则正常打印值。

【讨论】:

  • 这样的答案。非常REPL。很有用。哇。
猜你喜欢
  • 1970-01-01
  • 2014-03-11
  • 2013-10-21
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
相关资源
最近更新 更多