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