Pythonic way for missing dict keys

Carsten Haese carsten at uniqsys.com
Sat Jul 21 00:26:19 EDT 2007


On Sat, 21 Jul 2007 09:22:32 +0530, Rustom Mody wrote
> Can someone who knows about python internals throw some light on why
> >>> x in dic
> is cheaper than
> >>> dic.has_key(x)
> 
> ??

I won't claim to know Python internals, but compiling and disassembling the
expressions in question reveals the reason:

>>> from compiler import compile
>>> from dis import dis
>>> dis(compile("dic.has_key(x)","","eval"))
  1           0 LOAD_NAME                0 (dic)
              3 LOAD_ATTR                1 (has_key)
              6 LOAD_NAME                2 (x)
              9 CALL_FUNCTION            1
             12 RETURN_VALUE
>>> dis(compile("x in dic","","eval"))
  1           0 LOAD_NAME                0 (x)
              3 LOAD_NAME                1 (dic)
              6 COMPARE_OP               6 (in)
              9 RETURN_VALUE

"dic.has_key(x)" goes through an attribute lookup to find the function that
looks for the key. "x in dic" finds the function more directly.

--
Carsten Haese
http://informixdb.sourceforge.net




More information about the Python-list mailing list