5

我偶尔会使用 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)对我来说似乎毫无用处,所以我想知道为什么每个人都会使用它们?

[编辑] 用 %s 添加了示例

4

4 回答 4

9

对于浮点数, 和 的值repr可以str变化:

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

使用%rfor 字符串将导致在其周围加上引号:

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

您应该始终使用%f浮点数和%d整数。

于 2013-06-13T07:49:29.443 回答
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}

于 2013-06-13T07:57:19.893 回答
2

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

docs中,它们会准确地告诉您微调结果的方式,例如

>>> "%x-%5x-%#5x-%05x-%#05x" % (12,12,12,12,12)
'c-    c-  0xc-0000c-0x00c'
于 2013-06-13T08:11:42.517 回答
0

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

于 2013-06-13T08:02:05.790 回答