On Mon, 20 Feb 2006 10:08:48 +1100, "Delaney, Timothy \(Tim\)" <[EMAIL 
PROTECTED]> wrote:
>Farel wrote:
>
>> Tim, Are you saying that:
>>      not (b in m)
>> is faster than:
>>     b not in m
>
>On the contrary. `not (b in m)` requires negating the result of `b in m`
>(via an additional bytecode operation). `b not in m` doesn't. However,
>the difference in performance is minimal, as testing using the timeit
>module will show you.

Not since Python 2.4:

    >>> dis.dis(lambda: x not in y)
      1           0 LOAD_GLOBAL              0 (x)
                  3 LOAD_GLOBAL              1 (y)
                  6 COMPARE_OP               7 (not in)
                  9 RETURN_VALUE        
    >>> dis.dis(lambda: not (x in y))
      1           0 LOAD_GLOBAL              0 (x)
                  3 LOAD_GLOBAL              1 (y)
                  6 COMPARE_OP               7 (not in)
                  9 RETURN_VALUE        
    >>> 

>
>The important difference is the improvement in clarity. There is no
>possibility for misinterpretation as to the meaning of `b not in m`,
>whereas with the original `not b in m` I had to actually go check the
>precedence rules to be sure what would happen. Adding the parentheses
>makes it clear, but doesn't read as well as using the `not in` operator.
>
>As others have said, if you really care about the performance of
>something, the timeit module is your friend. Discussions about *why* you
>get certain performance results are then useful.

But this stuff is all still true :)

Jean-Paul
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to