The Cost of Dynamism (was Re: Pyhon 2.x or 3.x, which is faster?)
BartC
bc at freeuk.com
Mon Mar 14 20:25:25 EDT 2016
On 14/03/2016 23:24, Steven D'Aprano wrote:
> On Mon, 14 Mar 2016 06:39 am, BartC wrote:
>
>> class switch(object):
>> value = None
>> def __new__(class_, value):
>> class_.value = value
>> return True
>>
>> def case(*args):
>> return any((arg == switch.value for arg in args))
>
> That's quite a clever use of a class. By clever, I mean imaginative, not
> necessarily smart.
I think so too. But it also looks inefficient.
> Try this instead:
>
> c = chr(c)
> if 'A' <= c <= 'Z':
> upper += 1
> elif 'a' <= c <= 'z':
> lower += 1
> elif '0' <= c <= '9':
> digits += 1
> else:
> other += 1
>
>
> But even better:
>
> if c.isupper():
> upper += 1
> elif c islower():
> lower += 1
> elif c.isdigit():
> digits += 1
> else:
> other += 1
>
>
> which will work correctly for non-ASCII characters as well.
Yes, but now you've destroyed my example!
A more realistic use of switch is shown below [not Python]. I've taken
out the code for each section, including various nested switches, to
show the test patterns better.
Now an if-elif chain won't perform as well.
doswitch p++^ # (looping switch)
when 'a'..'z','$','_' then
when '0'..'9' then
when 'A'..'Z' then
when '!' then
when '#' then
when '\\' then
when '{' then
when '}' then
when '.' then
when ',' then
when ';' then
when ':' then
when '(' then
when ')' then
when '[' then
when ']' then
when '|' then
when '^' then
when '@' then
when '?' then
when '£' then
when '~' then
when '¬' then
when '+' then
when '-' then
when '*' then
when '/' then
when '%' then
when '=' then
when '<' then
when '>' then
when '&' then
when '\'','`' then
when '"' then
when ' ','\t' then
when cr then
when lf then
when etx,0 then
else # unicode goes here...
end switch
--
Bartc
More information about the Python-list
mailing list