Encapsulation in Python

BartC bc at freeuk.com
Mon Mar 14 21:22:32 EDT 2016


On 15/03/2016 00:58, Chris Angelico wrote:
> On Tue, Mar 15, 2016 at 11:54 AM, BartC <bc at freeuk.com> wrote:
>>> In Python, there's no reason to restrict 'switch'
>>> to integers, so I would expect its semantics to be based on either
>>> equality comparisons or inequality comparisons
>>
>>
>> I use two forms of switch: one for integers only (very fast), and the other
>> for any other values, which does tests in sequence.
>
> I'm not sure what you gain by restricting to integers that you
> couldn't also gain with other hashable types. Can you elaborate on
> these optimizations?

The integer-switch is intended for use with jump-tables, which requires 
not only that the case expressions are known at compile-time, but that 
they don't span too large a range.

(When a jump-table couldn't be used, then there was a slightly different 
implementation which scanned a list of the case-expressions. Linearly; a 
binary search or hash look-up could be done too, but this was in fast 
static code, not interpreted, so was not too critical. But I don't use 
this any more anyway.)

For use with Python, because constant expressions are going to be 
limited, such a switch would only work with case expressions that are 
numeric literals or character constants, which have to be written 
b"A"[0] iirc. So rather limited unless someone introduces named 
constants at the same time...

-- 
Bartc



More information about the Python-list mailing list