[Zope-dev] Re: hasattr implementation for Zope?

Jim Fulton jim at zope.com
Fri May 27 14:01:58 EDT 2005


This is amazing.  Really amazing.  I stand corrected.

Jim

Tim Peters wrote:
> [Paul Winkler]
> 
>>>But of course we don't do it because accessing globals in a method that
>>>might be looped over is slow.  Which, hopefully, will become a non-issue
>>>some day (PEP 267, 268, 280).
> 
> 
> [Jim Fulton]
> 
>>Note that in my version above, marker is a local rather than a global
>>and gets looked up at local-variable speed.
> 
> 
> Nope, it's a "cell" reference to an enclosing scope, and gets looked
> up at cell-dereference speed.  In my experience, that's generally a
> bit slower than accessing a module global.  That may have to do with a
> quirk of MSVC's code generation; unsure.
> 
> Here's a little program that times it 3 ways:
> 
> """
> def lookup1(arg, _marker=object()):
>     return _marker
> 
> def lookup2():
>     _marker = object()
>     def lookup2(arg):
>         return _marker
>     return lookup2
> lookup2 = lookup2()
> 
> _marker = object()
> def lookup3(arg):
>     return _marker
> 
> from time import clock as now # s/clock/time/ on Linux
> from itertools import repeat
> 
> for f in lookup1, lookup2, lookup3:
>     start = now()
>     for dummy in repeat(None, 1000000):
>         f(dummy)
>     finish = now()
>     print "%-8s %.6g" % (f.__name__, finish - start)
> """
> 
> Under WinXP Python 2.4.1, the global trick (lookup3) is consistently
> fastest, and the lexical scope trick (lookup2) is consistently
> slowest; this is typical output across 3 runs:
> 
> lookup1  0.427597
> lookup2  0.450777
> lookup3  0.404399
> 
> lookup1  0.423195
> lookup2  0.471619
> lookup3  0.405306
> 
> lookup1  0.42321
> lookup2  0.448071
> lookup3  0.405078
> 
> Note that lookup1 has the overhead of installing the default arg into
> the locals on each call, which is an expense neither lookup1 nor
> lookup3 endure.
> 
> measurement-never-agrees-with-anyone<wink>-ly y'rs  - tim


-- 
Jim Fulton           mailto:jim at zope.com       Python Powered!
CTO                  (540) 361-1714            http://www.python.org
Zope Corporation     http://www.zope.com       http://www.zope.org


More information about the Zope-Dev mailing list