字串函式 - 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