零填充zfill函数错误?

时间:2016-06-26 09:59:57

标签: python

我注意到str.zfill(x)可以返回一个小于`x字符的字符串。例如:

>>> "%.2x".zfill(8) % 255
'0000ff'
>>> "%.2x".zfill(8) % 256
'0000100'

这种奇怪的行为是如何解释的?

1 个答案:

答案 0 :(得分:3)

行为是正确的。 zfill(x)本身始终返回一个字符串,该字符串至少与原始字符串一样长,并且至少包含x个字符。 %缩短版,将%.2f替换为较短的字符串:

>>> "%.2x" % 255
'ff'

由于ff%.2x短,所以最终会减少字符数。

请记住zfill对格式化说明符一无所知,因此:

>>> "%.2x".zfill(8)
'0000%.2x'

正如您所看到的那样,%.2x保持不变,后来对%的调用将其替换为ff缩短字符串。

之后您必须致电zfill

>>> ("%.2x" % 255).zfill(8)
'000000ff'

另请注意,您可以避免使用callinf zfill并使用字符串格式执行所有操作:

>>> "%08.2x" % 255
'000000ff'

0是填充字符,8是字符串的宽度。

旁注:指定8的总宽度和2的精度实际上是无用的。指定.2x的唯一效果是在小于0的数字前面添加16

>>> "%.2x" % 5
'05'
>>> "%.2x" % 10
'0a'

当数字更大时,它没有任何效果:

>>> "%.2x" % 16
'10'
>>> "%x" % 16
'10'

8零填充无论如何都会添加0,因此格式说明符%08.2x完全等同于%08x