Python打印f-string时如何保留数字下划线分隔符的原有位置?
Python数字下划线的存储与保留问题
- 首先明确:你在数字字面量里加的下划线不会被Python解释器存储。不管你写的是
40_000还是40000,最终在内存里都是同一个整数对象,下划线只是语法层面的可读性分隔符,解释时会被直接忽略,运行时不会留下任何下划线相关的位置信息。 - 你用到的
print(f"{deposit:_}")是输出阶段的动态格式化,它会自动按千位给数字加下划线,和你写字面量时的下划线位置完全无关——哪怕你写的是4_0000,格式化后依然会输出40_000。 - 如果想要保留你自己定义的下划线分隔位置(比如不是千位的特殊分隔方式),那确实需要自定义一个类,把原始的带下划线的字符串存起来,重写
__repr__或__str__方法来还原你当初的书写格式。举个简单的例子:
class CustomNumber: def __init__(self, literal): # 把下划线去掉转成数值 self.value = int(literal.replace('_', '')) # 保存原始的带下划线的字符串 self.literal = literal def __repr__(self): # 输出时返回原始格式 return self.literal # 支持转成整数使用 def __int__(self): return self.value # 用法示例 deposit = CustomNumber("40_000") print(deposit) # 输出 40_000 print(int(deposit)) # 输出 40000
内容的提问来源于stack exchange,提问作者Anil
相关产品推荐
相关产品推荐

