Most efficient way to write data out to a text file?

Bjorn Pettersen BPettersen at NAREX.com
Sat Jun 29 15:06:01 EDT 2002


> From: Dave Kuhlman [mailto:dkuhlman at rexx.com] 
> 
> candiazoo at attbi.com wrote:
> 
> [snip]
> 
> Thank you for posting this.  Very helpful.
> 
> Could we have a bit of evaluation and explanation please.  I'm 
> suspicious about whether some of these changes actually made a 
> difference.  I'd like a little understanding before I start 
> changing my Python coding style.

[snip optimization involving removing free vars, and string concat]

Looking up a name in globals or builtin is very expensive compared to
looking it up in local scope (use the dis module to see the opcodes
involved -- anything that has LOAD_GLOBAL in it is potentially slow).
Most experienced Python programmers will therefore use something like:

  def foo(arg1, arg2, func=MyModule.func):
      ...

after they have profiled the program and found foo to be a bottleneck.
Similarly, looking up an attribute of an object involves searching its
__dict__. If you save the returned value in a local, you basically get a
fast "load from array" operation instead.

When it comes to string concatenation it is an O(n**2) operation, so
it's usually better to do:

  def foo():
      result = []
      append = result.append
      for i in xrange(100000):
          append(`i`)	# `i` is faster than repr(i)
      return ''.join(result)

I would say the string concat optimization is always a good idea, the
global->local optimization is ok as long as it doesn't interfer with
readability -- other people will surely disagree <wink>.

-- bjorn





More information about the Python-list mailing list