2016-06-26 41 views
-1

我注意到str.zfill(x)可以返回一個小於'x個字符的字符串。例如:零填充zfill函數的bug?

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

這個奇怪的行爲是如何解釋的?

回答

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的唯一影響是在更短的數字前加016

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

它沒有任何效果時,數字越大:

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

而且8零fill會加上0,所以格式說明符%08.2x恰好等於%08x