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