2009-11-19 84 views
1

我从一本书学习Python和跨越这个例子就是:宽度和精度使用*

>>> '%f, %.2f, %.*f % (1/3.0, 1/3.0, 4, 1/3.0) 
# Result: '0.333333, 0.33, 0.3333' 

不太明白这里发生了什么,尤其是在两者之间的“4”。

+1

这是无效的python。你错过了字符串的结尾报价,我猜可能“1.3.0”部分应该是“1/3.0”。 – truppo 2009-11-19 16:59:21

回答

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) 
+0

哦,就是这样?那么扩展的表单是不是更可读? – 3zzy 2009-11-19 17:06:14

+0

它可能更易读,但你可能不知道字段宽度是多少 – SilentGhost 2009-11-19 17:07:46

+0

虽然更具可读性,但它在运行时允许较少的灵活性。 – 2009-11-19 17:08:15

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在the official docs。然而,看起来它解析了4是你想要做下一个参数的小数位数。

例如:

'%.*f' % (5, 1/3.0) 

返回

'0.33333' 

'%.*f' % (6, 1/3.0) 

返回

'0.333333' 

它似乎是一种提供可变长度精度的方法,因此您可以允许用户指定它。