如何使用Python3 f-string显示所需的前导零数量?

5hcedyr0  于 2023-03-24  发布在  Python
关注(0)|答案(1)|浏览(188)

我只想将一个数字格式化为十六进制,总共有四个字符-所以最多有三个前导零。我正在尝试:

$ python3 --version
Python 3.10.10

$ python3 -c 'TVAR=0x000a; print(f"{TVAR:#04x}")'
0x0a

所以,我认为04x我已经为f字符串指定了总共4个字符的字符串,如果需要的话,可以向左填充零-但我只得到了一个两个字符的十六进制格式的字符串。
我能以某种方式修改这种f字符串规范,使我得到一个4位的、左零填充的十六进制数字字符串(在本例中为0x 000 a)吗?如果可以,如何修改?

wydwbb8l

wydwbb8l1#

来自文档:
'#'选项会导致转换使用“替代形式”。不同类型的替代形式定义不同。此选项仅对整数、浮点数和复杂类型有效。对于整数,当使用二进制、八进制或十六进制输出时,此选项会将相应的前缀'0b'、' 0o'、'0x'或'0X'添加到输出值。
后来:
width是一个十进制整数,用于定义最小总字段宽度,包括任何前缀、分隔符和其他格式字符。如果未指定,则字段宽度将由内容决定。
注:"including any prefixes"
最后:
如果未给出显式对齐方式,则在width字段前加上零(“0”)字符将为数值类型启用可识别符号的零填充。
对于x类型:
十六进制格式。输出以16为基数的数字,9以上的数字使用小写字母。
把这些放在一起,我们可以用途:

TVAR = 0x000a
print(f"{TVAR:#06x}")

其输出:

0x000a

不可否认,我个人发现关于FormatSpec迷你语言的文档在某些部分很难解析,因为它涉及到大量的跳跃来找到您感兴趣的特定案例。

相关问题