From: http://blog.csdn.net/yyt8yyt8/article/details/7030416
Reference: http://zhidao.baidu.com/link?url=Sc4LZLKx1Cax503f9pv0mY2jel9FMpTR0VWt4aNhDQL2XfBkuSw1IdNB_ptK2CAcMMu9sUdZXQpa17zJo54DdFlfzTG9SYaHiRowRwEdTTa
內建函數str()和repr() (representation,表達,表示)或反引號操作符(``)可以方便地以字符串的方式獲取對象的內容、類型、數值屬性等信息。str()函數得到的字符串可讀性好(故被print調用),而repr()函數得到的字符串通常可以用來重新獲得該對象,通常情況下 obj==eval(repr(obj)) 這個等式是成立的。這兩個函數接受一個對象作爲其參數,返回適當的字符串。
事實上repr()和``做一樣的事情,返回一個對象的“官方”字符串表示。其結果絕大多數情況下(不是所有)可以通過求值運算(內建函數eval())重新得到該對象。
str()則不同,它生成一個對象的可讀性好的字符串表示,結果通常無法用eval()求值,但適合print輸出。
如下例:
>>> class D(object): ... def __str__(self): ... return "a __str__" ... def __repr__(self): ... return "a __repr__" ... >>> dr = D() >>> print dr a __str__ >>> dr a __repr__ >>> "%s" % dr 'a __str__' >>> "%r" % dr 'a __repr__'
爲什麼有了repr()還需要``?
Python中,有的操作符和函數是做同樣的事情,原因是某些場合下函數會比操作符更適合使用,比如函數對象可作爲參數傳遞。雙星號(**)乘方運算和pow()內建函數都返回x的y次方.