What is the difference between print and print() in python 2.7
In Python 2.7 (and before), print
is a statement that takes a number of arguments. It prints the arguments with a space in between.
So if you do
print "box:", box
It first prints the string "box:", then a space, then whatever box
prints as (the result of its __str__
function).
If you do
print ("box:", box)
You have given one argument, a tuple consisting of two elements ("box:" and the object box
).
Tuples print as their representation (mostly used for debugging), so it calls the __repr__
of its elements rather than their __str__
(which should give a user-friendly message).
That's the difference you see: (The width is: 100, and the height is: 200)
is the result of your box's __str__
, but <__main__.Rectangle instance at 0x0293BDC8>
is its __repr__
.
In Python 3 and higher, print()
is a normal function as any other (so print(2, 3)
prints "2 3"
and print 2, 3
is a syntax error). If you want to have that in Python 2.7, put
from __future__ import print_function
at the top of your source file, to make it slightly more ready for the present.
This in mainly a complement to other answers.
You can see in Python 2 scripts print (var)
when the normal usage would be print var
.
It uses the fact that (var)
is just a parenthesed expression in Python 2 with is simply seen as var
so print(var)
and print var
behaves exactly the same in Python 2 - but only works when printing one single variable
The interesting point is that when you considere a migration to Python 3, print(var)
(here the call to function print) is already the correct syntax.
TL/DR: print(var)
in Python 2 is just a trick to ease Python3 migration using the fact that (var)
is just an expression - the tuple form would be (var,)