str() 和 repr() 都用来表示string对象。
str () 的例子:
s = 'Hello, Geeks.'
print str(s)
print str(2.0/11.0)
Output:
Hello, Geeks.
0.181818181818
repr()的例子:
s = 'Hello, Geeks.'
print repr(s)
print repr(2.0/11.0)
Output:
'Hello, Geeks.'
0.18181818181818182
从上面的输出中,我们可以看出如果我们使用了repr()函数,然后它输出一了一对引号和如果我们计算了值我们会得到一个给更加准确的结果。
下面是差异:
- str()用于创建一个输出给终端对象,而repr()主要用来测试和开发,repr的目标是让它更清楚明白,然后str的目标是让它可读性更好。对于上面的例子,如果我们假定了一个浮点数有小舍入误差,
repr可以显示出来,而str不会。 - repr()计算对象的“正式”字符串表示(包含关于对象的所有信息的表示),str()用于计算对象的“非正式”字符串表示(用于打印对象的表示)。
- print语句和str()内联函数使用__str__去展示一个string的表示对于一个object而while内部函数使用__repr__去展示一个对象。
让我们用一个例子来理解这一点:
import datetime
today = datetime.datetime.now()
# Prints readable format for date-time object
print str(today)
# prints the official format of date-time object
print repr(today)
Output:
2016-02-22 19:32:04.078030
datetime.datetime(2016, 2, 22, 19, 32, 4, 78030)
str()以用户能够理解日期和时间的方式显示今天的日期。
repr()打印日期-时间对象的“官方”表示(意味着使用“官方”字符串表示可以重构对象)。
如何让它们作用于我们自己定义的类呢?
如果我们需要调试的详细信息,用户定义的类也应该有一个_repr__。如果我们认为为用户提供一个字符串版本是有用的,我们就创建一个_str__函数。
# Python program to demonstrate writing of __repr__ and
# __str__ for user defined classes
# A user defined class to represent Complex numbers
class Complex:
# Constructor
def __init__(self, real, imag):
self.real = real
self.imag = imag
# For call to repr(). Prints object's information
def __repr__(self):
return 'Rational(%s, %s)' % (self.real, self.imag)
# For call to str(). Prints readable form
def __str__(self):
return '%s + i%s' % (self.real, self.imag)
# Driver program to test above
t = Complex(10, 20)
print str(t) # Same as "print t"
print repr(t)
Output:
10 + i20
Rational(10, 20)