I understand the difference between a statement and an expression, and I understand that Python3 turned print() into a function.
However I ran a print() statement surrounded with parenthesis on various Python2.x interpreters and it ran flawlessly, I didn’t even have to import any module.
My question: Is the following code print("Hello SO!") evaluated as a statement or an expression in Python2.x?
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
Consider the following expressions:
a = ("Hello SO!")
a = "Hello SO!"
They’re equivalent. In the same way, with a statement:
statement_keyword("foo")
statement_keyword "foo"
are also equivalent.
Notice that if you change your print function to:
print("Hello","SO!")
You’ll notice a difference between python 2 and python 3. With python 2, the (...,...) is interpteted as a tuple since print is a statement whereas in python 3, it’s a function call with multiple arguments.
Therefore, to answer the question at hand, print is evaluated as a statement in python 2.x unless you from __future__ import print_function (introduced in python 2.6)
Method 2
print("Hello SO!") is evaluated as the statement print ("Hello SO!"), where the argument to the print statement is the expression ("Hello SO!").
This can make a difference if you are printing more than one value; for example print("Hello", "world") will print the 2-element tuple ('Hello', 'world') instead of the two strings "Hello" and "world".
For compatibility with Python 3 use from __future__ import print_function:
>>> print("Hello", "world")
('Hello', 'world')
>>> from __future__ import print_function
>>> print("Hello", "world")
Hello world
Method 3
It is still evaluated as a statement, you are simply printing ("Hello SO!"), which simply evaluates to "Hello SO!" since it is not a tuple (as mentioned by delnan).
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