在Python中将整数格式化为字符串时,何时使用%d而不是%s更为重要?

5
假设我不需要填充或其他格式转换,那么在打印数字时使用%d什么时候比使用%s更重要?
从下面的片段中看来,似乎没有区别。
>>> "%d %d"%(12L,-12L)
'12 -12'
>>> "%s %s"%(12L,-12L)
'12 -12'

使用语言环境是否会有所不同? - Mark Ransom
5个回答

8

%s 可以格式化任何 Python 对象并将其打印为字符串。在这种情况下,%d 和 %s 打印的结果相同,因为您正在传递 int/long 对象。假设您尝试传递其他对象,则 %s 将打印 str() 表示形式,而 %d 要么失败,要么会打印其定义的数值。

>>> print '%d' % True
1
>>> print '%s' % True
True

当你确定要将longs/float转换为int时,请使用%d。


5

基本情况下没有太大区别。%d 允许您进行数字格式化,而 %s 不行。类型检查也有所不同。如果您使用 %d 发送非整数,您将收到一个错误,但 %s 将快乐地将任何内容字符串化。

Python2> "%s" % ("x",)
'x'
Python2> "%d" % ("x",)
 <type 'exceptions.TypeError'> : %d format: a number is required, not str

3

在您的情况下可能没有区别,但是您不能做相反的事情:

>>> "%d" % ("12")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str
>>> "%s" % ("12")
'12'

3

这取决于您想要真实值的十进制还是字符串近似值。请查看文档

>>> "%d %d" % (12, -12.9343)
'12 -12'

>>> "%s %s" % (12, -12.9343)
'12 -12.9343'

>>> "%f %.5f" % (12, -12.9343)
'12.000000 -12.93430'

>>> "%.5d %.5d" % (12, -12.9343)
'00012 -00012'

>>> "%.8f %.8f" % (12, -12.9343)
'12.00000000 -12.93430000'

>>> "%5.2s %5.2s" % (12, -12.9343)
'   12    -1'

3

如果你将自己限制在足够小的玩具案例中,你将找不到任何区别 - 数字12的字符串表示与字符串"12"的字符串表示是无法区分的。

然而,稍微增加一点复杂性就会显示出差异。例如,尝试使用12.54:

>>> "%d %d"%(12.54,-12.54)
'12 -12'
>>> "%s %s"%(12.54,-12.54)
'12.54 -12.54'

你将会看到一个区别。正如其他人所指出的那样,虽然可以将数字强制转换为字符串,但是字符串无法强制转换为数字。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接