[Python-Dev] Switch statement
Fredrik Lundh
fredrik at pythonware.com
Thu Jun 22 18:22:17 CEST 2006
Guido van Rossum wrote:
>> which simply means that expr will be evaluated at function definition
>> time, rather than at runtime. example usage:
>>
>> var = expression
>> if var == constant sre.FOO:
>> ...
>> elif var == constant sre.BAR:
>> ...
>> elif var in constant (sre.FIE, sre.FUM):
>> ...
>
> This gets pretty repetitive. One might suggest that 'case' could imply
> 'constant'...?
possibly, but I find that a tad too magic for my taste.
a "constant" (or perhaps better, "const") primary would also be useful
in several other cases, including:
- as a replacement for default-argument object binding
- local dispatch tables, and other generated-but-static data structures
- explicit (but still anonymous) constant/expression "folding"
an alternative would be to add a const declaration that can only be used
in local scopes; i.e.
def foo(value):
const bar = fie.fum
if value == bar:
...
which would behave like
def foo(value, bar=fie.fum):
if value == bar:
...
but without the "what if we pass in more than one argument?" issue.
yet another alternative would be a const declaration that you could use
on a global level, but I fail to see how you could propagate the "const-
ness" property to whoever wants to use a const object -- unless, of
course, you implement
const bar = fie.fum
def foo(value):
if value == bar:
...
as
class constant_wrapper(object):
def __init__(self, value):
self.value = value
bar = constant_wrapper(fie.fum)
def foo(value, bar=bar.value):
if value == bar:
...
(except for the default argument thing; see above). the result is a
kind of semi-constant objects that would be useful, but perhaps not
constant enough...)
it might be too much C# exposure, but I think I prefer the "explicit
when using" approach...
</F>
More information about the Python-Dev
mailing list