Why doesn’t this work?
lambda: print "x"
Is this not a single statement, or is it something else?
The documentation seems a little sparse on what is allowed in a lambda…
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
A lambda‘s body has to be a single expression. In Python 2.x, print is a statement. However, in Python 3, print is a function (and a function application is an expression, so it will work in a lambda). You can (and should, for forward compatibility 🙂 use the back-ported print function if you are using the latest Python 2.x:
In [1324]: from __future__ import print_function
In [1325]: f = lambda x: print(x)
In [1326]: f("HI")
HI
Method 2
In cases where I am using this for simple stubbing out I use this:
fn = lambda x: sys.stdout.write(str(x) + "n")
which works perfectly.
Method 3
what you’ve written is equivalent to
def anon():
return print "x"
which also results in a SyntaxError, python doesn’t let you assign a value to print in 2.xx; in python3 you could say
lambda: print('hi')
and it would work because they’ve changed print to be a function instead of a statement.
Method 4
The body of a lambda has to be an expression that returns a value. print, being a statement, doesn’t return anything, not even None. Similarly, you can’t assign the result of print to a variable:
>>> x = print "hello"
File "<stdin>", line 1
x = print "hello"
^
SyntaxError: invalid syntax
You also can’t put a variable assignment in a lambda, since assignments are statements:
>>> lambda y: (x = y)
File "<stdin>", line 1
lambda y: (x = y)
^
SyntaxError: invalid syntax
Method 5
You can do something like this.
Create a function to transform print statement into a function:
def printf(text): print text
And print it:
lambda: printf("Testing")
Method 6
With Python 3.x, print CAN work in a lambda, without changing the semantics of the lambda.
Used in a special way this is very handy for debugging.
I post this ‘late answer’, because it’s a practical trick that I often use.
Suppose your ‘uninstrumented’ lambda is:
lambda: 4
Then your ‘instrumented’ lambda is:
lambda: (print (3), 4) [1]
Method 7
The body of a lambda has to be a single expression. print is a statement, so it’s out, unfortunately.
Method 8
Here, you see an answer for your question. print is not expression in Python, it says.
Method 9
in python3 print is a function, and you can print and return something as Jacques de Hooge suggests, but i like other approach: lambda x: print("Message") or x
print function returns nothing, so None or x code returns x
other way around:
lambda x: x or print("Message") would print message only if x is false-ish
this is widely used in lua, and in python you can too instead of a if cond else b write cond and a or b
Method 10
If you want to print something inside a lambda func In Python 3.x you can do it as following:
my_func = lambda : print(my_message) or (any valid expression)
For example:
test = lambda x : print(x) or x**x
This works because print in Python 3.x is a function.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0