You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让pprint输出中所有整数以十六进制而非十进制显示?

让pprint输出整数为十六进制的解决方案

好问题!默认的pprint模块确实没有直接提供将整数转为十六进制输出的配置项,但我们可以通过自定义PrettyPrinter类来实现这个需求,只需要重写它的格式化逻辑即可。

实现步骤

我们需要继承pprint.PrettyPrinter,并重写它的format方法——这个方法负责处理每个对象的格式化规则。核心思路是:当遇到整数(排除布尔值,因为bool是int的子类)时,将其转换为十六进制字符串,其余类型保持默认的格式化行为。

完整代码示例

import pprint

class HexPrettyPrinter(pprint.PrettyPrinter):
    def format(self, obj, context, maxlevels, level):
        # 只处理整数,跳过布尔值避免误转
        if isinstance(obj, int) and not isinstance(obj, bool):
            # 转换为大写十六进制,匹配你给出的示例格式
            formatted_str = hex(obj).upper()
            # 返回格式化后的字符串及标记:
            # 第二个标记True表示该对象是无需递归的原子类型
            # 第三个标记False表示未触发循环引用
            return (formatted_str, True, False)
        # 其他类型调用父类的默认格式化逻辑
        return super().format(obj, context, maxlevels, level)

# 测试你的示例数据
test_data = {
    66: 'far',
    99: 'Bottles of the beer on the wall',
    '12': 4277009102,
    'boo': 21,
    'pprint': [16, 32, 48, 64, 80, 96, 112, 128]
}

# 使用自定义打印机输出
HexPrettyPrinter().pprint(test_data)

输出结果

运行上述代码后,你会得到完全符合预期的输出:

{0x42: 'far',
 0x63: 'Bottles of the beer on the wall',
 '12': 0xFEEDFACE,
 'boo': 0x15,
 'pprint': [0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80]}

额外说明

  • 如果偏好小写的十六进制格式,去掉.upper()即可
  • 这个自定义类会自动处理所有嵌套结构,比如列表、嵌套字典里的整数都会被转为十六进制
  • 特意排除布尔值,避免True/False被错误地转为0x1/0x0

内容的提问来源于stack exchange,提问作者Travis Griggs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:01:53