[Python-Dev] Re: Prospective Peephole Transformation (original) (raw)

Skip Montanaro skip at pobox.com
Fri Feb 18 15:57:39 CET 2005


>> Based on some ideas from Skip, I had tried transforming the likes of
>> "x in (1,2,3)" into "x in frozenset([1,2,3])"....

Fredrik> savings in what?  time or bytecode size?  constructed
Fredrik> micro-benchmarks, or examples from real-life code?

Fredrik> do we have any statistics on real-life "n" values?

My original suggestion wasn't based on performance issues. It was based on the notion of tuples-as-records and lists-as-arrays. Raymond had originally gone through the code and changed

for x in [1,2,3]:

to

for x in (1,2,3):

I suggested that since the standard library code is commonly used as an example of basic Python principles (that's probably not the right word), it should uphold that ideal tuple/list distinction. Raymond then translated

for x in [1,2,3]:

to

for x in frozenset([1,2,3]):

I'm unclear why the list in "for x in [1,2,3]" or "if x not in [1,2,3]" can't fairly easily be recognized as a constant and just be placed in the constants array. The bytecode would show n LOAD_CONST opcodes followed by BUILD_LIST then either a COMPARE_OP (in the test case) or GET_ITER+FOR_ITER (in the for loop case). I think the optimizer should be able to recognize both constructs fairly easily.

I don't know if that would provide a performance increase or not. I was after separation of functionality between tuples and lists.

Skip



More information about the Python-Dev mailing list