Tail of Godzilla Tail of Godzilla - 1 month ago 17
Python Question

What is the difference between print and print() in python 2.7

I am newbie on Python.

I run the following code on python 2.7 and I see different result when I use print or print(). What is the difference between these two functions?
I read other questions e.g., this question, but I didn't find my answer.

class Rectangle:
def __init__(self, w, h):
self.width = w
self.height = h
def __str__(self):
return "(The width is: {0}, and the height is: {1})".format(self.width, self.height)

box = Rectangle(100, 200)
print ("box: ", box)
print "box: ", box


The result is:

('box: ', <__main__.Rectangle instance at 0x0293BDC8>)
box: (The width is: 100, and the height is: 200)

Answer Source

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.