使用Python的str.format解释这种行为" general"说明符,左对齐符号识别零填充。 {0:其中09.6克}

时间:2014-04-12 12:04:31

标签: python string-formatting

有人可以解释一般'格式说明符的工作原理吗?我很困惑左边对齐0填充如何工作。我不知道这是python中的错误,还是我根本不明白文档的内容。

在下面的输出中,我的混淆是在最后3个打印输出块中,特别是最右边的列。有人可以解释,参考文档格式规范,为什么它们会这样输出,请?

(这是Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:25:23) [MSC v.1600 64 bit (AMD64)] on win32

test.py:

t = [8123, 0.0, 1.0, 0.799999, 1.3243423487123]

for v in t:
    print(str.format("{0:9g} {0:9.6g} {0:09.6g} ", v))
print()

for v in t:
    print(str.format("{0:>9g} {0:>9.6g} {0:>09.6g} ", v))
print()

for v in t:
    print(str.format("{0:=9g} {0:=9.6g} {0:=09.6g} ", v))
print()



# What is going on with the right column here???
for v in t:
    print(str.format("{0:<9g} {0:<9.6g} {0:<09.6g} ", v))
print()

# What is going on with the right column here???
for v in t:
    print(str.format("{0:<9,g} {0:<9,.6g} {0:<09,.6g} ", v))
print()


# Preceding the width field by a zero ('0') character enables sign-aware zero-padding for numeric types.
# This is equivalent to a fill character of '0' with an alignment type of '='.
#
# Why doesn't this right column do the same thing as above?
for v in t:
    print(str.format("{0:0=9g} {0:0=9.6g} {0:0=09.6g} ", v))
print()

其输出为:

$ python3 test.py
     8123      8123 000008123 
        0         0 000000000 
        1         1 000000001 
 0.799999  0.799999 00.799999 
  1.32434   1.32434 001.32434 

     8123      8123 000008123 
        0         0 000000000 
        1         1 000000001 
 0.799999  0.799999 00.799999 
  1.32434   1.32434 001.32434 

     8123      8123 000008123 
        0         0 000000000 
        1         1 000000001 
 0.799999  0.799999 00.799999 
  1.32434   1.32434 001.32434 

8123      8123      812300000 
0         0         000000000 
1         1         100000000 
0.799999  0.799999  0.7999990 
1.32434   1.32434   1.3243400 

8,123     8,123     8,1230000 
0         0         000000000 
1         1         100000000 
0.799999  0.799999  0.7999990 
1.32434   1.32434   1.3243400 

000008123 000008123 000008123 
000000000 000000000 000000000 
000000001 000000001 000000001 
00.799999 00.799999 00.799999 
001.32434 001.32434 001.32434 

1 个答案:

答案 0 :(得分:0)

相关文件如下:

  

使用零('0')字符开头宽度字段可启用符号   数字类型的零填充。 这相当于fill个字符   对齐类型为'0'的{​​{1}}。

'='对齐选项的文档是:

  

强制填充符号放在符号后面(如果有的话)但在符号之前   数字。这用于以'='形式打印字段。   此对齐选项仅对数字类型有效。

+000000120<分别左右对齐给定项目:

  

强制字段在可用空间内左对齐(这个   是大多数对象的默认值。

     

强制字段在可用空间内右对齐(这个   是数字的默认值。

请注意使用动词强制。我相信这里说明如果指定了>,则输出是左对齐的。期。其他隐含的排列不予考虑(例如<填充所隐含的=

这解释了您提供的所有示例:如果您放置0,则输出左对齐,即使使用<也应进行零填充。您是否期望09.6g会被忽略?我相信这将是一个糟糕的选择,因为< 显式它应该被尊重,而隐式 <应该被覆盖。< / p>

我在上一个示例中没有让您感到困惑,因为输出 完全等同于第一个输出,这与上述文档一致。