使用*设置宽度和精度
我正在通过一本书学习Python,遇到了这个例子:
>>> '%f, %.2f, %.*f % (1/3.0, 1/3.0, 4, 1/3.0)
# Result: '0.333333, 0.33, 0.3333'
我不太明白这里发生了什么,特别是中间的那个'4'。
2 个回答
1
你发的那行代码里有两个语法错误。1.3.0 不是一个有效的数字,而且字符串没有结束。
下面是一个有效的字符串格式的版本。
'%f, %2.f, %.*f' % (1/3.0, 1/3.0, 4, 1/3.0)
并且输出是:
'0.333333, 0.33, 0.3333'
我在官方文档里找不到关于 %.*f 的说明。不过,看起来它是在解析4这个数字,表示你想要下一个参数有多少位小数。
举个例子:
'%.*f' % (5, 1/3.0)
返回
'0.33333'
和
'%.*f' % (6, 1/3.0)
返回
'0.333333'
这似乎是一种提供可变长度精度的方法,这样你可以让用户自己指定。
3
我想你是想表达这样的意思:
>>> '%f, %2.f, %.*f' % (1/3.0, 1.3, 4, 1/3.0)
'0.333333, 1, 0.3333'
4
是一个通配符值,用来代替星号 *
。当它被展开时,相当于:
>>> '%f, %2.f, %.4f' % (1/3.0, 1.3, 1/3.0)