<[EMAIL PROTECTED]> wrote: >I was wondering if the following two "if" statements compile down to > the same bytecode for a standard Dictionary type: > > m = {"foo": 1, "blah": 2} > > if "foo" in m: > print "sweet" > > if m.has_key("foo"): > print "dude"
nope. >>> import dis >>> dis.dis(compile("'foo' in dict", "", "exec")) 1 0 LOAD_CONST 0 ('foo') 3 LOAD_NAME 0 (dict) 6 COMPARE_OP 6 (in) 9 POP_TOP 10 LOAD_CONST 1 (None) 13 RETURN_VALUE >>> dis.dis(compile("dict.has_key('foo')", "", "exec")) 1 0 LOAD_NAME 0 (dict) 3 LOAD_ATTR 1 (has_key) 6 LOAD_CONST 0 ('foo') 9 CALL_FUNCTION 1 12 POP_TOP 13 LOAD_CONST 1 (None) 16 RETURN_VALUE "in" is a built-in operator, "has_key" is an ordinary method. both paths end up in the same C function, but the method path is usually a little bit slower. </F> -- http://mail.python.org/mailman/listinfo/python-list