[Tutor] What are these two string-formatting styles called?
eryksun
eryksun at gmail.com
Fri Jun 14 18:40:26 CEST 2013
On Fri, Jun 14, 2013 at 12:01 PM, Jim Mooney <cybervigilante at gmail.com> wrote:
> On 14 June 2013 08:23, Dotan Cohen <dotancohen at gmail.com> wrote:
>>
>> What are these two string-formatting styles called?
>> '%.3f' % x
>> '{0:.3f}'.format(x)
>
>
> The first one is a string Expression, using % as the overloaded operator
> The second one is a string method, with .format() as the method for a string
> object
The str.format method is one part of the new system; the part that
you'll usually interact with. But under the hood there's a fundamental
shift that puts the object in control of its formatting via the
__format__ special method.
This works:
>>> from decimal import Decimal
>>> '{0:.27f}'.format(Decimal(1).exp())
'2.718281828459045235360287471'
or with built-in format():
>>> format(Decimal(1).exp(), '.27f')
'2.718281828459045235360287471'
while the old way prints the wrong value, given the Decimal object's precision:
>>> '%.27f' % Decimal(1).exp()
'2.718281828459045090795598298'
because it first has to be converted to a machine double-precision
float, which has 15 decimal digits of precision (15.95 to be a bit
more precise).
More information about the Tutor
mailing list