"John Machin" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > > Paul McGuire wrote: >> "Jerry Hill" <[EMAIL PROTECTED]> wrote in message >> news:[EMAIL PROTECTED] >> > Hello all, >> As far as working just in Python, you could remove the tuple unpacking >> inside removeColor, and shorten it to just: >> >> def removeColor(rgb): >> return rgb==(0,0,0) >> >> or even better: >> >> BLACK = (0,0,0) >> def removeColor(rgb): >> return rgb==BLACK >> >> By defining BLACK once and just referring to it by name, you also avoid >> dynamically constructing the (0,0,0) tuple in every call. > > Bzzzzzt. It's not dynamically constructed. Its a constant (in 2.4 at > least) > > | >>> BLACK=(0,0,0) > | >>> def func1(rgb): > | ... return rgb==BLACK > | ... > | >>> def func2(rgb): > | ... return rgb==(0,0,0) > | ... > | >>> import dis > | >>> dis.dis(func1) > | 2 0 LOAD_FAST 0 (rgb) > | 3 LOAD_GLOBAL 1 (BLACK) > | 6 COMPARE_OP 2 (==) > | 9 RETURN_VALUE > | >>> dis.dis(func2) > | 2 0 LOAD_FAST 0 (rgb) > | 3 LOAD_CONST 2 ((0, 0, 0)) > | 6 COMPARE_OP 2 (==) > | 9 RETURN_VALUE > | >>> > > > C:\junk>python -mtimeit -s"BLACK=(0,0,0);rgb=(1,1,1)" "rgb==BLACK" > 1000000 loops, best of 3: 0.129 usec per loop > > C:\junk>python -mtimeit -s"rgb=(1,1,1)" "rgb==(0,0,0)" > 1000000 loops, best of 3: 0.127 usec per loop >
Hunh! It sure seems like I recently had to do something like this, and the value was rebuilt every time. Perhaps I was building a "constant" list instead of a tuple... >>> def fn(lst): ... return lst == [1,1,1] ... >>> import dis >>> dis.dis(fn) 2 0 LOAD_FAST 0 (lst) 3 LOAD_CONST 1 (1) 6 LOAD_CONST 1 (1) 9 LOAD_CONST 1 (1) 12 BUILD_LIST 3 15 COMPARE_OP 2 (==) 18 RETURN_VALUE >>> So tuples can be inlined as constants, but lists will be built on the fly. -- Paul -- http://mail.python.org/mailman/listinfo/python-list