In Python there seem to be two different ways of generating formatted output:
user = "Alex" number = 38746 print("%s asked %d questions on stackoverflow.com" % (user, number)) print("{0} asked {1} questions on stackoverflow.com".format(user, number))
Is there one way to be preferred over the other? Are they equivalent, what is the difference? What form should be used, especially for Python3?
The %d formatter is used to input decimal values, or whole numbers. If you provide a float value, it will convert it to a whole number, by truncating the values after the decimal point. The %f formatter is used to input float values, or numbers with values after the decimal place.
They are used for formatting strings. %s acts a placeholder for a string while %d acts as a placeholder for a number. Their associated values are passed in via a tuple using the % operator.
%s acts as a placeholder for the real value. You place the real value after the % operator. This method is often referred to as the "older" way because Python 3 introduced str. format() and formatted string literals (f-strings).
Use the format
method, especially if you're concerned about Python 3 and the future. From the documentation:
The formatting operations described here are modelled on C's
printf()
syntax. They only support formatting of certain builtin types. The use of a binary operator means that care may be needed in order to format tuples and dictionaries correctly. As the new :ref:string-formatting
syntax is more flexible and handles tuples and dictionaries naturally, it is recommended for new code. However, there are no current plans to deprecateprintf
-style formatting.
.format
was introduced in Python2.6
If you need backward compatibility with earlier Python, you should use %
For Python3 and newer you should use .format
for sure
.format
is more powerful than %
. Porting %
to .format
is easy but the other way round can be non trivial
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With