字符串函数 - 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