Paul Rubin wrote:
> Steven D'Aprano writes:
>> Yes, I'm aware of that, but that's not what John's code is doing -- he's 
>> doing a series of if expr ... elif expr tests. I don't think a case 
>> statement can do much to optimize that.
> 
> The series of tests is written that way because there is no case
> statement available.  It is essentially switching on a bunch of
> character constants and then doing some additional tests in each
> branch.

Although doing some of the tests first and then checking the input
conditionally might be faster here.

Another idea: You could exchange the methods whenever self.contentModelFlag
changes, i.e. you'd have a "dataState_CDATA", a "dataState_PCDATA" etc.


> It could be that using ord(c) as an index into a list of functions
> might be faster than a dict lookup on c to get a function.

Rather unlikely, given that calling "ord(c)" involves a dict lookup for
"ord". You might get away with the pre-initialised keywords trick, though.


> I think
> John is hoping to avoid a function call and instead get an indexed
> jump within the Python bytecode for the big function.

Hmm, yes, the actual code inside the conditionals is pretty short, so the
call overhead might hurt here.

Stefan
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to