[Python-Dev] Switch statement

M.-A. Lemburg mal at egenix.com
Fri Jun 23 20:01:47 CEST 2006

Reading on in the thread it seems that there's agreement
on using "static" instead of "const", to s/const/static

M.-A. Lemburg wrote:
> Georg Brandl wrote:
>> M.-A. Lemburg wrote:
>>> A nice side-effect would be that could easily use the
>>> same approach to replace the often used default-argument-hack,
>>> e.g.
>>> def fraction(x, int=int, float=float):
>>>     return float(x) - int(x)
>>> This would then read:
>>> def fraction(x):
>>>     const int, float
>>>     return float(x) - int(x)
>> There's a certain risk that the premature-optimization fraction will
>> plaster every function with const declarations, but they write
>> unreadable code anyway ;)
>> Aside from this, there's still another point: assume you have quite a
>> number of module-level string "constants" which you want to use in a switch.
>> You'd have to repeat all of their names in a "const" declaration in order
>> to use them this way.
> If you want to use the switch-dispatch table optimization, yes.
> I'm sure we could find ways to make such declarations more
> user-friendly. E.g. to declare all symbols imported from a
> module constant:
> # Declare the name "module" constant:
> const module
> # Declare all references "module.<something>" constant:
> const module.*
> This would allow you to e.g. declare all builtins constant,
> avoiding cluttering up your code with const declarations,
> as in the above example.
> Note that such a declaration would go beyond just the use in
> a switch statement. It allows you to declare names reserved
> within the scope you are defining them in and gives them
> a special meaning - much like "global" does.
> Indeed, with this kind of declaration you wouldn't need to
> add the switch statement to benefit from the dispatch
> table optimization, since the compiler could easily identify
> an if-elif-else chain as being optimizable even if it uses
> symbols instead of literals for the values.
> Furthermore, the compiler could do other optimizations on the
> const declared names, such as optimizing away global lookups
> and turning them into code object constants lookups.

Marc-Andre Lemburg

Professional Python Services directly from the Source  (#1, Jun 23 2006)
>>> Python/Zope Consulting and Support ...        http://www.egenix.com/
>>> mxODBC.Zope.Database.Adapter ...             http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/

::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! ::::

More information about the Python-Dev mailing list