[Python-Dev] Switch statement
Fredrik Lundh
fredrik at pythonware.com
Thu Jun 22 20:21:41 CEST 2006
Guido van Rossum wrote:
>> 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.
>
> So the constant would be evaluated at function definition time? I find
> that rather confusing.
well, I find the proposed magic behaviour of "case" at least as confusing...
>> (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...)
>
> I fail to see the usefulness of this wrapper. The wrapper isn't
> completely transparent o some code that uses type checks may need to
> be modified. The wrapper doesn't get removed by a simple assignment;
> after
>
> const a = 1
> b = a
>
> how do we prevent b from being treated as a constant?
we cannot -- this approaches assigns (a small amount of) const-ness to
objects, not names.
>> it might be too much C# exposure, but I think I prefer the "explicit
>> when using" approach...
>
> It may be not enough C# exposure, but I don't know exactly which
> approach you are referring to.
the original one: if you want to treat an expression as a constant, you
have to be explicit. examples:
>>> a "constant" (or perhaps better, "const") primary would also be useful
>>> in several other cases, including:
>>>
>>> - as a replacement for default-argument object binding
this is used when you want to pass an *object* into an inner function,
rather than a name:
def foo(value, bar=fie.fum):
if value == bar:
...
can be written
def foo(value):
if value == const bar:
...
>>> - local dispatch tables, and other generated-but-static data structures
def foo(value):
table = const {
1: "one",
2: "two",
3: fie.fum,
}
(maybe "static" would be a better keyword?)
>>> - explicit (but still anonymous) constant/expression "folding"
def foo(value):
if value < const (math.pi / 2):
...
and so on. to implement this, the runtime simply evaluates the "const"
expressions together with the default value expressions, and assigns the
result to some func_xxx attribute. everything else works as usual.
</F>
More information about the Python-Dev
mailing list