On Tue, 26 Feb 2008 06:33:01 -0800, castironpi wrote: > On Feb 26, 8:14 am, Marc 'BlackJack' Rintsch <[EMAIL PROTECTED]> wrote: >> On Tue, 26 Feb 2008 06:02:12 -0800, bearophileHUGS wrote: >> > This is a real difference, that has real impact on the programs I >> > write, so I often use the if/else approach, despite the dict.get() >> > method being semantically fitter and shorter. >> > So can the dict.get() method be speed up? And if not, why? >> >> I guess it's the method lookup that's the slow part. Factor it out of the >> loop and measure again:: >> >> adict_get = adict.get >> for _ in xrange(M): >> for k in keys1: >> r = adict_get(k, None) >> for k in keys2: >> r = adict_get(k, None) >> >> Ciao, >> Marc 'BlackJack' Rintsch > > Can't be. The string 'get' is only hashed once, since it's hard-coded > into the script, and looking it up can't be any slower than looking up > __getitem__.
Within functions it is faster. In the original code the `get` attribute is looked up on the `adict` object twice in each loop iteration via hashing. In my code it is looked up once before the loop and within the loop the local name `adict_get` isn't looked up but hardcoded as index into the internal locals array of the function. Ciao, Marc 'BlackJack' Rintsch -- http://mail.python.org/mailman/listinfo/python-list