On Sat, 09 Feb 2008 01:20:00 +0000, Matt Nordhoff wrote: > Steven D'Aprano wrote: >> Except that using has_key() means making an attribute lookup, which >> takes time. > > I was going to say that, but doesn't 'in' require an attribute lookup of > some sort too, of __contains__ or whatever?
I don't believe so. I understand that the in operator at the C level knows about built-in types, and does something like this pseudo-code: case type(source): dict: return MAP_IN(source, target) list: return LIST_IN(source, target) str: return STR_IN(source, target) otherwise: return source.__contains__(target) Except all in C, so it's fast. I understand that the dict has_key() method is essentially a wrapper around MAP_IN (or whatever it's actually called), and so is also fast, just not quite as fast because of the relatively slow look-up to get to has_key() in the first place. -- Steven -- http://mail.python.org/mailman/listinfo/python-list