Reputation: 51505
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...
Upvotes: 178
Views: 117364
Reputation: 17355
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.
Upvotes: 3
Reputation: 81
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
Upvotes: 2
Reputation: 7000
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]
Upvotes: 7
Reputation: 7332
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.
Upvotes: 28
Reputation: 769
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")
Upvotes: 11
Reputation: 12570
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
Upvotes: 202
Reputation: 7961
Here, you see an answer for your question. print
is not expression in Python, it says.
Upvotes: 1
Reputation: 2731
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
Upvotes: 11
Reputation: 47840
The body of a lambda has to be a single expression. print
is a statement, so it's out, unfortunately.
Upvotes: 2
Reputation: 1139
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.
Upvotes: 25