.format vs. %

Ian Kelly ian.g.kelly at gmail.com
Tue Jan 3 03:16:13 EST 2012

On Mon, Jan 2, 2012 at 11:15 PM, Steven D'Aprano
<steve+comp.lang.python at pearwood.info> wrote:
> Which is exactly why it is not deprecated: it doesn't say it is
> deprecated and has no timeline for removal. It may not even be removed:
> "may" go away is not "will" go away.
> Going around saying that features are deprecated just because they may
> (or may not) some day in the distant future become deprecated is FUD. It
> simply isn't true that % formatting is deprecated: Python Dev has a
> formal process for deprecating code, and that process has not been
> applied to % and there are no plans to do so in the foreseeable future.

So it's not formally deprecated, but it is nonetheless labeled
obsolete and discouraged, or "informally deprecated" if you will.

I'm not sure it's true that "there are no plans to do so in the
foreseeable future."  According to the release notes from Python 3.0,
% formatting was supposed to be deprecated in Python 3.1.  Why that
didn't happen, I don't know.  Maybe there was a discussion on py-dev
where it was decided that % formatting would not be deprecated after
all (in which case the misleading "obsolete" note really ought to be
removed from the documentation).  Maybe that discussion has been
tabled for the time being.  Or maybe it hasn't been deprecated simply
because nobody has gotten around to actually doing it yet.

In any case the statement of obsolescence and the lack of clarity
about the feature's future is enough cause for me to avoid the
feature, although you of course are free to use it however you want.

> There is a huge code base using this feature, including the standard
> library, and Python does not arbitrarily deprecate features used by real
> code without good reason. Just because a number of Python devs want to
> encourage people to use format doesn't imply that % will go away any time
> before Python 4000.

The reason for deprecating it is because Python currently has no fewer
than three mechanisms for string formatting (not even including
ordinary string concatenation), which according to the Zen of Python
is two too many.  In my view, % formatting has a lot in common with
the print statement -- it's warty syntax that is better implemented as
a function.  In Python 3 we could have kept the print statement and
avoided breaking a feature commonly used by "real code" by adding the
print function as a supplement to the statement (probably with a
slightly different name).  But the devs went a step further and
actually removed the print statement, and IMO that was a good thing.
The same thing should be done with % formatting (although I agree on
one point, it likely won't happen before Python 4).


More information about the Python-list mailing list