Bottom Page

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
Quote
#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
Quote
#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,
Quote
#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.
Quote

Top Page

Possibly Related Threads...
Thread Author Replies Views Last Post
  Help with AWS Lambda function faws2019 0 136 Aug-27-2019, 01:54 PM
Last Post: faws2019
  eval lambda function with restricted context Olivier 7 639 Mar-04-2019, 10:45 PM
Last Post: Olivier
  Using a lambda function within another function JChapman 8 879 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 1,138 Apr-19-2018, 05:56 AM
Last Post: anandmn85
  How do I make an assignment inside lambda function? Standard_user 2 9,898 Nov-13-2016, 05:54 PM
Last Post: Standard_user
  lambda function tkj80 3 2,120 Oct-24-2016, 06:27 PM
Last Post: nilamo

Forum Jump:


Users browsing this thread: 1 Guest(s)