Method much slower than function?

Peter Otten __peter__ at web.de
Thu Jun 14 09:44:53 CEST 2007


Leo Kislov wrote:

> On Jun 13, 5:40 pm, ido... at gmail.com wrote:
>> Hi all,
>>
>> I am running Python 2.5 on Feisty Ubuntu. I came across some code that
>> is substantially slower when in a method than in a function.
>>
>> >>> cProfile.run("bar.readgenome(open('cb_foo'))")
>>
>>          20004 function calls in 10.214 CPU seconds
> 
>> >>> cProfile.run("z=r.readgenome(open('cb_foo'))")
>>
>>          20004 function calls in 0.041 CPU seconds
>>
> 
> I suspect open files are cached so the second reader
> picks up where the first one left: at the of the file.
> The second call doesn't do any text processing at all.
> 
>   -- Leo

Indeed, the effect of attribute access is much smaller than what the OP is
seeing:

$ cat iadd.py
class A(object):
    def add_attr(self):
        self.x = 0
        for i in xrange(100000):
            self.x += 1
    def add_local(self):
        x = 0
        for i in xrange(100000):
            x += 1

add_local = A().add_local
add_attr = A().add_attr
$ python2.5 -m timeit -s 'from iadd import add_local' 'add_local()'
10 loops, best of 3: 21.6 msec per loop
$ python2.5 -m timeit -s 'from iadd import add_attr' 'add_attr()'
10 loops, best of 3: 52.2 msec per loop

Peter



More information about the Python-list mailing list