引言
今天读别人的代码,遇到了一个问题,格式化输出中 {0:2.2f}
和 {1:2.2f}
究竟有什么区别呢?这里特来记录一下。
示例1
x = 1.111
print("{0:2.2f}".format(x))
print("{:2.2f}".format(x))
"""
result:
1.11
1.11
"""
我们看到,{0:2.2f}
中的第一个标识符 0
是可以被省略的。无论我们带不带它我们都可以得到正确的结果。我们也发现了,变量 x
中存放的数值在打印时仅保留了小数点后的 2
位,此时,具体发生了什么我们暂时不知道,我们往下看。
示例2
x = 1.111
y = 11.111
print("{0:2.2f}---{1:2.2f}".format(x, y))
print("{1:2.2f}---{0:2.2f}".format(x, y))
"""
result:
1.11---11.11
11.11---1.11
"""
通过上面的结果,我们看到,当我们使用 {0:2.2f}---{1:2.2f}
时,x 被优先输出在第一个位置,而当我们使用 {1:2.2f}---{0:2.2f}
时,y
被输出在了第一个位置。结合示例 2
和示例 1
的结果,我们可以得到,第一个参数 0
表示的参数输出位置标号,读者可以尝试将示例 1
中的 0
改为 1
,就会报错,因为只有一个元素输出,而格式化输出的位置编号是从 0
开始的。
示例3
x = 1.111
y = 11.111
print("{:2.2f}---{:10.2f}".format(x, y))
"""
result:
1.11--- 11.11
"""
为了简化,我们省略书写冒号前的参数,接着我们改动冒号后得第一个参数值,从最终的结果我们看到,第二个输出元素 11.11
占用了 10
个位置。事实上,冒号后的第一个参数值表示的是用来输出这个数据的最小字符数。
示例4
x = 1.111
y = 11.111
print("{:2.2f}---{:.3}".format(x, y))
"""
result:
1.11---11.1
"""
从上面看到,当没有 f
时, 3
表示的是总共的有效位数,当有 f
时,2
表示的是小数点后的有效位数。那么结合示例 4
示例 3
和示例 1
,这一点也很容易得到验证。
结论
- 冒号前的第一个参数,格式化输出的位置标识符
- 冒号前的第二个参数,用于输出当前参数的最小字符数
.nf
:n
为正整数,保留小数点后n
位有效数字。- .
n
:n
为正整数,保留n
位有效数字
如果大家觉得有用,就点个赞让更多的人看到吧~