Hi

With my editor cap on, I am working my way through the documentation.
The section on lambda, in the python language section of the book,
makes me uncomfortable.  It says this:

***
The existence of lambda allows re-factoring an existing function in
terms of a different set of arguments. cache.ram and cache.disk are
web2py caching functions.
***

It is implied that the lambda keyword allows currying, when in fact
that functionality is provided by standard Python functions.  For
example (using the example given in the text),

>>> def f(a, b): return a + b
>>> g = lambda a: f(a, 3)
>>> g(2)
5

Could be written without lambda as

>>> def f(a,b): return a + b
>>> def g(a): return f(a, 3)
>>> g(2)
5

The anonymity of lambda means that inline code is allowed, because no
prior declaration is needed in order to obtain a reference, as is the
case with def, but on the other hand, lambdas are limited to a single
expression, whereas def functions are not.  Consider the next example:

>>> number = 7
>>> print cache.ram(str(number), lambda: isprime(number), seconds)
True
>>> print cache.ram(str(number), lambda: isprime(number), seconds)
True

Could be rewritten as

>>> number = 7
>>> def isprimecall: return isprime(number)
>>> print cache.ram(str(number), isprimecall, seconds)
True
>>> print cache.ram(str(number), isprimecall, seconds)
True

In conclusion, the description of lambda in the text is misleading.
Comments?

Reply via email to