case/switch statement?
Philippe C. Martin
philippe at philippecmartin.com
Mon Jun 13 16:13:10 EDT 2005
Any speed issue ?
invalidemail at aerojockey.com wrote:
> Philippe C. Martin wrote:
>> Leif K-Brooks wrote:
>>
>> > Joe Stevenson wrote:
>> >> I skimmed through the docs for Python, and I did not find anything
>> >> like
>> >> a case or switch statement. I assume there is one and that I just
>> >> missed it. Can someone please point me to the appropriate document,
>> >> or
>> >> post an example? I don't relish the idea especially long if-else
>> >> statements.
>> >
>> > If you really want one, you could use
>> > <http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/410692>.
>>
>> I _love_ Python!
>
>
> Well, if you loved that, here's something even more evil. This was
> Bengt Richter's original idea that Cliff Wells and I improved upon.
> First define some functions and classes:
>
> . _cache = {}
> .
> . class _BaseCaseException(Exception):
> . pass
> .
> . def switch(v):
> . if v not in _cache:
> . class _CaseException(_BaseCaseException):
> . pass
> . _cache[v] = _CaseException
> . raise _cache[v]
> .
> . def case(v):
> . if v not in _cache:
> . class _CaseException(_BaseCaseException):
> . pass
> . _cache[v] = _CaseException
> . return _cache[v]
> .
> . default = _BaseCaseException
>
>
> Then you can define a switch statement like this:
>
> . x = 2
> .
> . try: switch(x)
> .
> . except case(1):
> . print "Case 1"
> .
> . except case(2):
> . print "Case 2"
> .
> . except case(3):
> . print "Case 3"
> .
> . except default:
> . print "Default"
> .
> . except NameError:
> . print "You can still catch regular exceptions like NameError"
>
>
>
> I-love-Python-too-but-this-isn't-why-ly yr's,
>
More information about the Python-list
mailing list