New Python 3.0 string formatting - really necessary?
Steven D'Aprano
steve at REMOVE-THIS-cybersource.com.au
Fri Dec 19 22:07:49 EST 2008
On Fri, 19 Dec 2008 17:12:00 -0800, r wrote:
> Why move away from a concise and widely accepted way of sting
> formatting, just to supposedly make it a little easier for n00bs? (which
> i disagree this is easier) In turn, creating more syntactical clutter.
> (%s %f %d) is all you need to remember. If people can't understand that,
> i fear for the future of Humans as a species!
Reading your wibbling, so do I. Take ten deep breaths and calm down.
Firstly, the introduction of format() is not to "make it a little easier
for n00bs" as you claim, but to allow more powerful, flexible string
formatting.
Secondly, to use % formatting to full effectiveness you need to know MUCH
more than (%s %f %d). You need to know:
Formatting codes: %s %r %d %f %g %G %c %i %u %o %x %X %e %E %%
(have I missed any?)
Keyword formatting: %(name)s
Flags: - + 0
Field width and precision, including the special case of "*"
and how they fit together:
%[(name)][flags][width][.precision][unused(!) length modifier]code
You also need to know about operator precedence:
>>> "%s" % 3+2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
and the special casing of tuples:
>>> "Tuple = %s" % (1,2,3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting
For trivial cases, format() isn't much harder than %:
"{0}".format(x)
"%s" % x
For more complex cases, format() will let you do things that you can't do
with only %, e.g. arbitrary fill characters, centring fields, percentage
formatting, mixing positional and keyword arguments, etc.
Before you blow yet another gasket, go read the PEP:
http://www.python.org/dev/peps/pep-3101/
--
Steven
More information about the Python-list
mailing list