Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Lambda function
#1
Hi, i'm a bit confused with this code
x=10
x=lambda : x+2
print(x())
because the right side of the '=' is evaluated first so this should have returned 12 rather than reported an error as it did
error:
    x=lambda : x+2
TypeError: unsupported operand type(s) for +: 'function' and 'int'
Please explain why this code doesn't work
Reply
#2
After the two first lines, x is no longer an integer, it is an anonymous function
>>> x = 10
>>> x = lambda: x + 2
>>> x
<function <lambda> at 0x7fb32e167048>
At this stage, x + 2 has not yet been executed. It's only executed when you call x() but then it is an error because you're trying to add a function and an integer
>>> x()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <lambda>
TypeError: unsupported operand type(s) for +: 'function' and 'int'
See this other example which is a regular function but works the same
>>> y = 122
>>> def spam():
...     print('The value of y is', y)
... 
>>> y = 314
>>> spam()
The value of y is 314
Reply
#3
It appears that the problem is that line 2 assigns the return of a function to its own variable.

x=10
y = (lambda x : x+2 )
print(y(x))           
Works,
Reply
#4
Just a gentle reminder - quote from PEP 8 -- Style Guide for Python Code >>> Programming Recommendations

Quote: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)
I'm not 'in'-sane. Indeed, I am so far 'out' of sane that you appear a tiny blip on the distant coast of sanity. Bucky Katt, Get Fuzzy

Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Add two resultant fields from python lambda function klllmmm 4 852 Jun-06-2023, 05:11 PM
Last Post: rajeshgk
  Writing a lambda function that sorts dictionary GJG 1 1,989 Mar-09-2021, 06:44 PM
Last Post: buran
  translating lambda in function fabs 1 2,122 Apr-28-2020, 05:18 AM
Last Post: deanhystad
  Lambda function recursion error DeadlySocks 1 2,011 Apr-13-2020, 05:09 PM
Last Post: deanhystad
  Lambda function error localsystemuser 3 4,660 Jan-29-2020, 01:43 PM
Last Post: DeaD_EyE
  Help with AWS Lambda function faws2019 0 1,557 Aug-27-2019, 01:54 PM
Last Post: faws2019
  eval lambda function with restricted context Olivier 7 5,071 Mar-04-2019, 10:45 PM
Last Post: Olivier
  Using a lambda function within another function JChapman 8 5,338 Jan-08-2019, 01:54 PM
Last Post: JChapman
  Write lambda function in pyhhon to coy data from multiple JSON into a single JSON fil anandmn85 2 4,188 Apr-19-2018, 05:56 AM
Last Post: anandmn85
  How do I make an assignment inside lambda function? Standard_user 2 19,909 Nov-13-2016, 05:54 PM
Last Post: Standard_user

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020