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