I\'m beginning to appreciate the value of lambda expressions in python, particularly when it comes to functional programming, map
, functions returning functions
This is not Pythonic and PEP8 discourages it:
Always use a def statement instead of an assignment statement that binds a lambda expression directly to an identifier.
Yes:
def f(x): return 2*x
No:
f = lambda x: 2*x
The first form means that the name of the resulting function object is specifically
'f'
instead of the generic'<lambda>'
. This is more useful for tracebacks and string representations in general. The use of the assignment statement eliminates the sole benefit a lambda expression can offer over an explicit def statement (i.e. that it can be embedded inside a larger expression)
A rule of thumb for this is to think on its definition: lambdas expressions are anonymous functions. If you name it, it isn't anonymous anymore. :)
These are functionally (no pun intended) identical.
indexer = lambda a0, a1, idx: a0[idx] + a1[idx]
def indexer(a0, a1, idx):
return a0[idx] + a1[idx]
If you have an aesthetic preference for one or the other, then use it.
I've written a named lambda expression to do the indexing instead of writing a whole other function
Well, you are writing a whole other function. You're just writing it with a lambda expression.
Why not use def
? You get nicer stack traces and more syntactical flexibility, and you don't lose anything. It's not like def
can't occur inside another function:
def fcn_operating_on_arrays(array0, array1):
def indexer(a0, a1, idx):
return a0[idx] + a1[idx]
...