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

Reply via email to