Gabriel Genellina wrote: > In the function above, s is a local variable, and accessing local > variables is very efficient (using an array of local variables, the > compiler assigns statically an index for each one). > Using self.s, on the other hand, requires a name lookup for each access. > The most obvious change would be to use a local variable s, and assign > self.s = s only at the end. This should make both methods almost identical > in performance.
Yeah, that's a big deal and makes a significant difference on my machine. > In addition, += is rather inefficient for strings; the usual idiom is > using ''.join(items) Ehh. Python 2.5 (and probably some earlier versions) optimize += on strings pretty well. a="" for i in xrange(100000): a+="a" and: a=[] for i in xrange(100000): a.append("a") a="".join(a) take virtually the same amount of time on my machine (2.5), and the non-join version is clearer, IMO. I'd still use join in case I wind up running under an older Python, but it's probably not a big issue here. > And since you have Python 2.5, you can use the file as its own iterator; > combining all this: > > return ''.join(line.strip() for line in filehandle if '>' not in line) That's probably pretty good. -- http://mail.python.org/mailman/listinfo/python-list