我注意到str.zfill(x)
可以返回一个小于`x字符的字符串。例如:
>>> "%.2x".zfill(8) % 255
'0000ff'
>>> "%.2x".zfill(8) % 256
'0000100'
这种奇怪的行为是如何解释的?
答案 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
。