为什么我会在Python字符串格式中使用%r以外的任何东西?

时间:2013-06-13 07:46:26

标签: python string-formatting

我偶尔会使用Python字符串格式。这可以这样做:

print('int: %i. Float: %f. String: %s' % (54, 34.434, 'some text'))

但是,这也可以这样做:

print('int: %r. Float: %r. String: %r' % (54, 34.434, 'some text'))

以及使用%s:

print('int: %s. Float: %s. String: %s' % (54, 34.434, 'some text'))

因此,我的问题是:为什么我会使用除%r或%s以外的任何其他内容?其他选项(%i,%f和%s)对我来说似乎没用,所以我只是想知道为什么每个人都会使用它们?

[edit]添加了%s的示例

4 个答案:

答案 0 :(得分:7)

对于浮点数,reprstr的值可能会有所不同:

>>> num = .2 + .1
>>> 'Float: %f. Repr: %r Str: %s' % (num, num, num)
'Float: 0.300000. Repr: 0.30000000000000004 Str: 0.3'

对字符串使用%r会在其周围生成引号:

>>> 'Repr:%r Str:%s' % ('foo','foo')
"Repr:'foo' Str:foo"

您应该始终使用%f表示浮点数,%d表示整数。

答案 1 :(得分:4)

@AshwiniChaudhary回答了有关旧字符串格式的问题,如果您要使用新的字符串格式,请执行以下操作:

>>> 'Float: {0:f}. Repr: {0!r} Str: {0!s}'.format(.2 + .1)
'Float: 0.300000. Repr: 0.30000000000000004 Str: 0.3'

实际上!s是默认值,因此您不需要它,最后一种格式可以是{0}

答案 2 :(得分:2)

与其他人一起,你可以更好地控制你的结果。

the docs中,他们会准确地告诉您如何微调结果,例如

>>> "%x-%5x-%#5x-%05x-%#05x" % (12,12,12,12,12)
'c-    c-  0xc-0000c-0x00c'

答案 3 :(得分:0)

如果'%f' % variable不是数字,您可以使用variable会引发异常的事实。