有人可以解释一般'格式说明符的工作原理吗?我很困惑左边对齐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
答案 0 :(得分:0)
相关文件如下:
使用零(
'0'
)字符开头宽度字段可启用符号 数字类型的零填充。 这相当于fill
个字符 对齐类型为'0'
的{{1}}。
'='
对齐选项的文档是:
强制填充符号放在符号后面(如果有的话)但在符号之前 数字。这用于以
'='
形式打印字段。 此对齐选项仅对数字类型有效。
+000000120
和<
分别左右对齐给定项目:
强制字段在可用空间内左对齐(这个 是大多数对象的默认值。
强制字段在可用空间内右对齐(这个 是数字的默认值。
请注意使用动词强制。我相信这里说明如果指定了>
,则输出是左对齐的。期。其他隐含的排列不予考虑(例如<
填充所隐含的=
。
这解释了您提供的所有示例:如果您放置0
,则输出左对齐,即使使用<
也应进行零填充。您是否期望09.6g
会被忽略?我相信这将是一个糟糕的选择,因为<
显式它应该被尊重,而隐式 <
应该被覆盖。< / p>
我在上一个示例中没有让您感到困惑,因为输出 完全等同于第一个输出,这与上述文档一致。