On Mar 14, 2008, at 1:47 AM, Dag Sverre Seljebotn wrote:

>> Dag Sverre wrote a similar writeup: http://wiki.cython.org/  
>> enhancements/switch . I think it's a good idea. For small lists  
>> the  savings will be minimal, but for larger ones there can be  
>> significant  gains.
>>
> I often question switch statements though, I'm actually quite happy  
> that Guido didn't make them part of Python. Often something like  
> this is more appropriate:
>
> handlers = {
>    500: http_ok,
>    404: http_not_found
> }
> handlers[retcode](request, response)

Yes, this is certainly better form. Of course, if request/response  
were code blocks, one would have to do something a bit more clever  
(e.g. make a dictionary of functions and then call one).

> Of course, since we are talking performance of the GCC compiler  
> here, I suppose it's one of the cases where performance for a O(1)  
> operation do count, and then it's a different matter. All I'm  
> saying is that most code I see using switch statements would often  
> be better off without it.

:)

Here's the latest use case that I wanted:
http://hg.sagemath.org/sage-main/file/ff0875e07b4e/sage/ext/ 
fast_eval.pyx (starting at line 294--ignore that last case, this is  
because the function gets called tens of thousands of times in a row,  
and I didn't want an uncommon case to make everything slower). An if- 
elif translation would work great here.

You can see that I used the dictionary paradigm in that same file as  
well.

- Robert

_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to