-1
我注意到str.zfill(x)
可以返回一個小於'x個字符的字符串。例如:零填充zfill函數的bug?
>>> "%.2x".zfill(8) % 255
'0000ff'
>>> "%.2x".zfill(8) % 256
'0000100'
這個奇怪的行爲是如何解釋的?
我注意到str.zfill(x)
可以返回一個小於'x個字符的字符串。例如:零填充zfill函數的bug?
>>> "%.2x".zfill(8) % 255
'0000ff'
>>> "%.2x".zfill(8) % 256
'0000100'
這個奇怪的行爲是如何解釋的?
該行爲是正確的。 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
零fill會加上0
,所以格式說明符%08.2x
恰好等於%08x
。