"Updating" lambda functions
bokr at oz.net
Fri Sep 17 10:26:19 CEST 2004
On Fri, 17 Sep 2004 07:46:12 +0000 (UTC), Steven Bethard <steven.bethard at gmail.com> wrote:
>Elaine Jackson <elainejackson7355 <at> home.com> writes:
>> "Terry Reedy" <tjreedy <at> udel.edu> wrote in message
>> news:mailman.3428.1095385637.5135.python-list <at> python.org...
>> | I am curious if there is any reason other that habit carried over from
>> | other languages to not write the above as
>> | def fu(x): return x
>> | def fu(x): return fu(x) + 17
>> | etc
>> In my interpreter (IDLE 1.0 on Windows 98) it causes an infinite regress.
>Yes, it will, exactly as the lambda version would have. (And all the
>solutions suggested to you for the lambda form are equally applicable to the
>def form.) The question is why use the lambda form when you *do* want to bind
>your function to a name? Basically,
>f = lambda args: body
>is equivalent to
>def f(args): body
>except that the def body is a set of statements (so you have to use 'return'),
>and the lambda body is a single expression.
obj.f = lambda args: body
is possible without an intermediate local binding of f that might clobber a previous f, as in
def f(args): body
obj.f = f
del f # if you want to clean up. But better save the old f in that case?
I'd rather use lambda.
>Not that it's coming any time soon, but Python 3000 is supposed to remove
>lambda functions, so when you really *do* want to bind a function to a name
>(like in your case here), it would probably be a good habit to get into to use
Well, if lambda is removed (or not ;-), I hope an anonymous def expression is allowed,
so we can write
obj.f = def(args):
obj.f = def(args): body
obj.f = (
) # at or to the left of the def column, for final dedent without special ')' processing.
(where def body indentation is referenced from wherever the def is)
More information about the Python-list