字符串函数 - str() 和 repr()
有两个函数可用于获取对象的可读表示。
repr(x)
称 x.__repr__()
:x
的表示。eval
通常会将此函数的结果转换回原始对象。
str(x)
调用 x.__str__()
:描述对象的人类可读字符串。这可能会忽略一些技术细节。
再版()
对于许多类型,此函数尝试返回一个字符串,该字符串在传递给 eval()
时会产生具有相同值的对象。否则,表示是包含在尖括号中的字符串,其中包含对象类型的名称以及其他信息。这通常包括对象的名称和地址。
STR()
对于字符串,这将返回字符串本身。这与 repr(object)
的区别在于 str(object)
并不总是尝试返回 eval()
可接受的字符串。相反,它的目标是返回可打印或人类可读的字符串。如果没有给出参数,则返回空字符串''
。
例 1:
s = """w'o"w"""
repr(s) # Output: '\'w\\\'o"w\''
str(s) # Output: 'w\'o"w'
eval(str(s)) == s # Gives a SyntaxError
eval(repr(s)) == s # Output: True
例 2:
import datetime
today = datetime.datetime.now()
str(today) # Output: '2016-09-15 06:58:46.915000'
repr(today) # Output: 'datetime.datetime(2016, 9, 15, 6, 58, 46, 915000)'
编写类时,可以覆盖这些方法来执行任何操作:
class Represent(object):
def __init__(self, x, y):
self.x, self.y = x, y
def __repr__(self):
return "Represent(x={},y=\"{}\")".format(self.x, self.y)
def __str__(self):
return "Representing x as {} and y as {}".format(self.x, self.y)
使用上面的类我们可以看到结果:
r = Represent(1, "Hopper")
print(r) # prints __str__
print(r.__repr__) # prints __repr__: '<bound method Represent.__repr__ of Represent(x=1,y="Hopper")>'
rep = r.__repr__() # sets the execution of __repr__ to a new variable
print(rep) # prints 'Represent(x=1,y="Hopper")'
r2 = eval(rep) # evaluates rep
print(r2) # prints __str__ from new object
print(r2 == r) # prints 'False' because they are different objects