How to write fast into a file in python?

Steven D'Aprano steve+comp.lang.python at pearwood.info
Sat May 18 00:01:13 EDT 2013


On Fri, 17 May 2013 21:18:15 +0300, Carlos Nepomuceno wrote:

> I thought there would be a call to format method by "'%d\n' % i". It
> seems the % operator is a lot faster than format. I just stopped using
> it because I read it was going to be deprecated. :( Why replace such a
> great and fast operator by a slow method? I mean, why format is been
> preferred over %?

That is one of the most annoying, pernicious myths about Python, probably 
second only to "the GIL makes Python slow" (it actually makes it fast). 

String formatting with % is not deprecated. It will not be deprecated, at 
least not until Python 4000.

The string format() method has a few advantages: it is more powerful, 
consistent and flexible, but it is significantly slower.

Probably the biggest disadvantage to % formatting, and probably the main 
reason why it is "discouraged", is that it treats tuples specially. 
Consider if x is an arbitrary object, and you call "%s" % x:

py> "%s" % 23  # works
'23'
py> "%s" % [23, 42]  # works
'[23, 42]'

and so on for *almost* any object. But if x is a tuple, strange things 
happen:

py> "%s" % (23,)  # tuple with one item looks like an int
'23'
py> "%s" % (23, 42)  # tuple with two items fails
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting


So when dealing with arbitrary objects that you cannot predict what they 
are, it is better to use format.



-- 
Steven



More information about the Python-list mailing list