Why doesn't print work in a lambda?

PythonPrintingLambdaPython 2.x

Python Problem Overview


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...

Python Solutions


Solution 1 - Python

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

Solution 2 - Python

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.

Solution 3 - Python

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.

Solution 4 - Python

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

Solution 5 - Python

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")
	

Solution 6 - Python

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]

Solution 7 - Python

The body of a lambda has to be a single expression. print is a statement, so it's out, unfortunately.

Solution 8 - Python

Here, you see an answer for your question. print is not expression in Python, it says.

Solution 9 - Python

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

Solution 10 - Python

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAnycornView Question on Stackoverflow
Solution 1 - PythonL̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳View Answer on Stackoverflow
Solution 2 - PythonDanny StapleView Answer on Stackoverflow
Solution 3 - PythondagoofView Answer on Stackoverflow
Solution 4 - PythonPaul KuliniewiczView Answer on Stackoverflow
Solution 5 - PythonVictor MartinsView Answer on Stackoverflow
Solution 6 - PythonJacques de HoogeView Answer on Stackoverflow
Solution 7 - PythontzamanView Answer on Stackoverflow
Solution 8 - Pythonvpit3833View Answer on Stackoverflow
Solution 9 - PythonDmitryView Answer on Stackoverflow
Solution 10 - PythonrkachachView Answer on Stackoverflow