Python字符串函数-str()和repr()

示例

有两个函数可用于获取对象的可读表示。

repr(x)来电:代表。通常会将此函数的结果转换回原始对象。x.__repr__()xeval

str(x)Calls :描述对象的人类可读字符串。这可能会漏掉一些技术细节。x.__str__()


repr()

对于许多类型,此函数会尝试返回一个字符串,当传递给时,该字符串将产生一个具有相同值的对象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  # 给出一个SyntaxError 
eval(repr(s)) == s # 输出:真

范例2:

import datetime
today = datetime.datetime.now()
str(today)  # 输出:'2016-09-15 06:58:46.915000'
repr(today) # 输出:'datetime.datetime(2016,9,15,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)  # 打印__str__
print(r.__repr__)  # prints __repr__: '<bound methodRepresent.__repr__of Represent(x=1,y="Hopper")>'
rep = r.__repr__()  # 将__repr__的执行设置为新变量
print(rep)  # prints 'Represent(x=1,y="Hopper")'
r2 = eval(rep) # 评价代表
print(r2)  # 打印__str__ from new object
print(r2 == r)  # 打印“ False”,因为它们是不同的对象