有人能解释一下“通用”格式说明符是如何工作的吗?我搞不懂左对齐和0填充是如何工作的。我不知道这是不是python中的一个bug,或者我只是不理解文档在说什么。
在下面的输出中,我的困惑是在打印输出的最后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 发布于 2014-04-12 23:49:20
相关文档如下:
在宽度字段之前加上零('0')字符的
可为数值类型启用符号感知的零填充。这等效于对齐类型为
'0''='**.**的的字符
其中,'=' align选项的文档为:
强制将填充放在符号(如果有)之后但在数字之前。这用于打印表单
+000000120中的字段。此对齐选项仅对数值类型有效。
<和>分别左对齐和右对齐给定项:
强制字段在可用空间内左对齐(这是大多数对象的默认设置)。
强制字段在可用空间内右对齐(这是数字的默认设置)。
注意动词force的用法。我相信这里说明的是,如果指定了<,则输出是左对齐的。句号。不考虑其他隐含对齐(例如,0填充所隐含的= )。
这解释了您提供的所有示例:如果您放置一个<,那么即使使用09.6g,输出也是左对齐的,它应该进行零填充。你有没有料到<会被忽略?我认为这将是一个糟糕的选择,因为既然<是显式的,那么它就应该被尊重,而隐式的=应该被覆盖。
我不明白最后一个示例中让您困惑的是什么,因为输出完全等同于第一个输出,这与上面的文档是一致的。
https://stackoverflow.com/questions/23030141
复制相似问题