Экран шестнадцатеричной консоли консоли Python

Я делаю кучу работы в консоли Python, и большинство из них ссылаются на адреса, которые я бы предпочел видеть в шестнадцатеричном формате.

Итак, если a = 0xBADF00D, когда я просто ввожу Python> a в консоль, чтобы просмотреть его значение, я бы предпочел, чтобы python ответил 0xBADF00D вместо 195948557.

Я знаю, что могу ввести '0x%X' % a, чтобы увидеть его в шестнадцатеричном формате, но я ищу какой-то вариант консоли python, чтобы он делал это автоматически. Что-то похоже на это? Спасибо!

Ответ 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'

Я подозреваю, что вы скоро устанете видеть все целые числа как шестнадцатеричные, и переключитесь на явное преобразование тех, которые вы хотите увидеть как hex соответственно.

Ответ 2

Основываясь на предыдущих ответах, здесь версия, которая работает для Python 2/3, не отображает bools как hex, а также правильно устанавливает переменную _:

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__

Ответ 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__() и т.д., чтобы они возвращали HexInt s.

Ответ 4

Изменение верхнего ответа 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

Ответ 5

Вы могли бы что-то вроде этого:

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

Чтобы получить базовое приглашение, которое выводит шестнадцатеричное значение всех результатов. Вы даже можете сделать это условным - проверьте, является ли возвращаемый тип input строкой или номером, и если это так, напечатайте шестнадцатеричное значение, иначе распечатайте значение обычно.