Guido van Rossum wrote: > Without const declarations none of this can work and > the "at-function-definition-time" freezing is the best, because most > predictable, approach IMO.
I you like this approach best, then how about using the same approach as we have for function default argument values: Variables which are to be regarded as constant within the scope of the function are declared as such by using a "const" declaration (much like we already have with the global declaration). a,b,c,d = range(4) defvalue = 1 def switch(x=defvalue): const a,b,c,d switch x: case a: return 'foo' case b: return 'foo' case c: return 'foo' case d: return 'foo' else: raise ValueError(x) This declaration would cause the compiler to generate LOAD_NAME opcodes just like for defvalue which then gets executed at code object execution time, ie. when the function is created. This would also work out for the solution 1 case in the PEP (if-elif-else)... <hint><hint> :-) def switch(x=defvalue): const a,b,c,d if x == a: return 'foo' elif x == b: return 'bar' elif x == c: return 'baz' elif x == d: return 'bazbar' else: raise ValueError(x) Furthermore, the compiler could protect the constant names from assignments (much in the same way it applies special treatment to variables declared global in a scope). 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) -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Jun 22 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/ ________________________________________________________________________ 2006-07-03: EuroPython 2006, CERN, Switzerland 10 days left ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com