开发者

When does it matter to use %d over %s when formatting integers to strings in python?

开发者 https://www.devze.com 2023-02-10 05:34 出处:网络
Assuming I don\'t need padding or other formatting conversion, when does it matter to use %d over %s when printi开发者_如何学运维ng numbers ?

Assuming I don't need padding or other formatting conversion, when does it matter to use %d over %s when printi开发者_如何学运维ng numbers ?

From the snippet below, there seems to be no difference.

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


%s can format any python object and print it is a string. The result that %d and %s print the same in this case because you are passing int/long object. Suppose if you try to pass other object, %s would print the str() representation and %d would either fail or would print its numeric defined value.

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

When you are clear if you want to convert longs/float to int, use %d.


There is little difference in the basic case. The %d does allow you to do numeric formatting that %s does not. There is a also a difference in type checking. If you happen to send a non-int to %d you will get an error, but %s will happily stringify whatever it gets.

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


There may be no difference in your case, but you can't do the opposite :

>>> "%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'


It depends on whether you want a decimal or a string approximation of the true value. Check out the 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'


If you restrict yourself to sufficiently tiny toy cases, you will find no difference - the string representation of the number 12 is indistinguishable from the string representation of the string "12".

However, even a little more complexity shows a difference. Try 12.54, for example:

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

and you'll see a difference. And as others have noted, while a number can be coerced into a string, a string cannot be coerced into a number.

0

精彩评论

暂无评论...
验证码 换一张
取 消