% string formatting - what special method is used for %d?
Steve D'Aprano
steve+python at pearwood.info
Sat Dec 10 03:52:02 EST 2016
On Sat, 10 Dec 2016 06:06 pm, Veek M wrote:
> When we do:
>
> print '%s %d' % ('hello', 10)
>
> what special method is being invoked internally within the string-
> format-specifier?
%d requires the argument to be an int, or able to be converted to int using
the __int__ special method.
py> class X(object):
... def __int__(self):
... return 42
...
py> "%d" % X()
'42'
> format() invokes format__
> print invokes __str__
print actually invokes __str__ or __repr__, whichever is available.
> I'm basically trying to make sense of:
>
> raise TypeError('urkle urkle %s' % list(dictionary))
> <=> raise TypeError('urkle urkle %s' % [ key1, val1, key2, val2 ]
The raise TypeError part of the code is irrelevant to your question. You
should always simplify your code to only the part that is relevant.
raise TypeError(some_string)
behaves the same regardless of how some_string is made.
> So, the % operator reads the format specifier and notices %s and
> therefore calls __str__ in the list class to figure out how to represent
> [ key1, val1, key2, val2 ].
>
> However what if I use %d? How do the other format specs work?
The format specifiers are similar to these:
%s => str(obj), which ends up calling __str__ or __repr__
%r => repr(obj), which ends up calling __repr__ or __str__
%c => chr(obj), or obj must be a string of length 1
%d %i %u => int(obj), which ends up calling __int__
%x %X => int(obj), then convert to hexadecimal
%o => int(obj), then convert to octal
%e %E %f %g %G => float(obj), which ends up calling __float__
%% => a literal % sign
--
Steve
“Cheer up,” they said, “things could be worse.” So I cheered up, and sure
enough, things got worse.
More information about the Python-list
mailing list