Case Statements
Mark Lawrence
breamoreboy at yahoo.co.uk
Wed Mar 16 17:43:10 EDT 2016
On 16/03/2016 19:41, BartC wrote:
> On 16/03/2016 09:51, Mark Lawrence wrote:
>> On 16/03/2016 09:35, Antoon Pardon wrote:
>
>>> So I guess those who would like a case statement in Python can
>>> only hope a core developer gets bitten by a nasty bug while using
>>> one of those ways of simulating switches.
>>>
>>
>> So that core developers can waste their time putting something into the
>> language that we've done without for 25 years, yes, that strikes me as
>> extremely worthwhile.
>
>
> I've noticed that Python doesn't appear to have a way of putting
> separators into numeric literals. (Or if it does, I've no idea how).
> That means being able to write:
>
> a = 1'000'000
> b = 239_288
> c = 0x7FFF`FFFF`FFFF`FFFF
>
> depending on what separator is used. Despite waiting for it for 25
> years, would that be worthwhile or not? (And if not, why not? And if it
> is, perhaps other things can be too.)
>
>> Of course the change is actually trivial,
>
> The above really is trivial (to anyone already familiar with the
> workings of the byte-code compiler).
>
>> as
>> BartC has all ready pointed out. The work involved is shown here
>> https://mail.python.org/pipermail/python-dev/2006-June/065827.html
>
> That article appears to try to do without using a new switch byte-code,
> as the author doesn't see the point. My code to implement a 'switch'
> byte-code (for integer expression and constant integer case-expressions)
> is below.
>
> Not shown is the support needed in the byte-code compiler (about 300
> lines in my case as it's a bit fiddly, but it's not a run-time cost).
>
> For a Python version, it might be an idea to make use of the convention
> for constants (all-caps), then a streamlined switch could be on the cards.
>
> global function k_switch:ref void =
> int index,n,lower
>
> n := getopnda
> lower := getopndb
>
> case sptr^.tag
> when tint,ttype then
> else
> pcerror("switch not int")
> esac
>
> index:=(sptr++)^.value-lower
>
> if u32(index)>=u32(n) then # out of range
> return ref int((pcptr+n*2+4)^)
> else
> return ref int((pcptr+index*2+4)^)
> fi
> end
>
>
Job done then. Raise an issue on the bug tracker and the extremely
simple task of having a switch/case statement in Python is solved. How
the dumbo core developers didn't see this in the first place I'll just
never know.
--
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.
Mark Lawrence
More information about the Python-list
mailing list