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)
SOLVING :
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.