假设我不需要填充或其他格式转换,何时打印数字时%s超过%s是否重要?
从下面的摘录中,似乎没有任何区别。
>>> "%d %d"%(12L,-12L)
'12 -12'
>>> "%s %s"%(12L,-12L)
'12 -12'
答案 0 :(得分:6)
%s
可以格式化任何python对象并打印它是一个字符串。在这种情况下,%d和%s打印相同的结果是因为您传递的是int / long对象。假设您尝试传递其他对象,%s将打印str()表示,%d将失败或将打印其数字定义值。
>>> print '%d' % True
1
>>> print '%s' % True
True
如果您想要将longs / float转换为int,请使用%d。
答案 1 :(得分:5)
基本情况差别不大。 %d允许您进行%s不执行的数字格式设置。类型检查也有区别。如果你碰巧发送一个非int到%d你会得到一个错误,但%s会很乐意将它得到的任何字符串化。
Python2> "%s" % ("x",)
'x'
Python2> "%d" % ("x",)
<type 'exceptions.TypeError'> : %d format: a number is required, not str
答案 2 :(得分: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 :(得分:3)
这取决于您是想要小数还是字符串逼近真值。查看docs。
>>> "%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'
答案 4 :(得分:3)
如果你将自己限制在足够小的玩具箱中,你会发现没有区别 - 数字12的字符串表示与字符串“12”的字符串表示无法区分。
然而,即使更复杂也显示出差异。尝试12.54,例如:
>>> "%d %d"%(12.54,-12.54)
'12 -12'
>>> "%s %s"%(12.54,-12.54)
'12.54 -12.54'
你会看到一个区别。正如其他人所指出的那样,虽然一个数字可以被强制转换成一个字符串,但是一个字符串不能被强制转换为数字。