C
Christian Tismer
Hi Pythonistas,
just as a small comment on the side-effects of the
rather new concept of local functions with access to
their scope:
This concept can be used to avoid having extra
classes just for keeping some read-only state.
Since this feature is not so obvious in the first
place, I thought to share the obervation.
In the ancient times, I saw myself writing classes
to parameterize functions, like this:
class Converter:
def __init__(self, scale):
self.scale = scale
def __call__(self, arg):
return self.scale * arg
inch_to_cm = Converter(2.54)
cm_to_inch = Converter(1 / 2.54)
....
This can be easily done without an extra class, just by
local variables which access the outer scope:
def _converter(scale):
def convert(arg):
return scale * arg
return convert
inch_to_cm = _converter(2.54)
cm_to_inch = _converter(1 / 2.54)
This trick (and I don't consider it a trick) works for
all cases, where you don't need write access to an instance
variable, but read access, only.
It is a very clean way to parameterize functions, and it
is very effective since there is no attribute lookup
necessary.
cheers - chris
--
Christian Tismer :^) <mailto:[email protected]>
Mission Impossible 5oftware : Have a break! Take a ride on Python's
Johannes-Niemeyer-Weg 9a : *Starship* http://starship.python.net/
14109 Berlin : PGP key -> http://wwwkeys.pgp.net/
work +49 30 89 09 53 34 home +49 30 802 86 56 mobile +49 173 24 18 776
PGP 0x57F3BF04 9064 F4E1 D754 C2FF 1619 305B C09C 5A3B 57F3 BF04
whom do you want to sponsor today? http://www.stackless.com/
just as a small comment on the side-effects of the
rather new concept of local functions with access to
their scope:
This concept can be used to avoid having extra
classes just for keeping some read-only state.
Since this feature is not so obvious in the first
place, I thought to share the obervation.
In the ancient times, I saw myself writing classes
to parameterize functions, like this:
class Converter:
def __init__(self, scale):
self.scale = scale
def __call__(self, arg):
return self.scale * arg
inch_to_cm = Converter(2.54)
cm_to_inch = Converter(1 / 2.54)
....
This can be easily done without an extra class, just by
local variables which access the outer scope:
def _converter(scale):
def convert(arg):
return scale * arg
return convert
inch_to_cm = _converter(2.54)
cm_to_inch = _converter(1 / 2.54)
This trick (and I don't consider it a trick) works for
all cases, where you don't need write access to an instance
variable, but read access, only.
It is a very clean way to parameterize functions, and it
is very effective since there is no attribute lookup
necessary.
cheers - chris
--
Christian Tismer :^) <mailto:[email protected]>
Mission Impossible 5oftware : Have a break! Take a ride on Python's
Johannes-Niemeyer-Weg 9a : *Starship* http://starship.python.net/
14109 Berlin : PGP key -> http://wwwkeys.pgp.net/
work +49 30 89 09 53 34 home +49 30 802 86 56 mobile +49 173 24 18 776
PGP 0x57F3BF04 9064 F4E1 D754 C2FF 1619 305B C09C 5A3B 57F3 BF04
whom do you want to sponsor today? http://www.stackless.com/