閒話不多說,我們開門見山:
直白來說,str、repr以及反引號操作符(『』)的作用是可以方便地以字串的形式獲取物件的內容、型別和數值屬性等資訊。在不使用他們的情況下效果是這樣滴:
class test():
def __init__(self,value='hello world'):
self.value = vlaue
>>> t=test()
>>> t
<__main__.test instance at 0x7ff677b47128>
>>> print t
<__main__.test instance at 0x7ff677b47128>
上邊列印出來的類物件為物件的記憶體位址,對大多數使用者來說並不算友好,因此就有了str和repr的出現,效果如下:
#對上邊定義的類進行繼承,並重構__repr__
class testrepr(test):
def __repr__(self):
return 'testrepr(%r)'%(self.data)
>>> tr=testrepr()
>>> tr
testrepr('hello world!')
>>> print tr
testrepr('hello world!')
#對上邊定義的類進行繼承,並重構__str__
calss teststr(test):
def __str__(self):
return '[teststr: %s]' % self.data
>>> ts = teststr()
>>> ts
<__main__.teststr at 0x7fa91c314e50>
>>> print ts
[value: hello, world!]
翻看一些資料,比較官方的解釋是:str是面向使用者的,得到的字串可讀性更好,而repr是面向哥的(程式猿),得到的字串通常用來重新獲取該物件。
repr和『』在特性和功能上非常相似,事實是這個倆是雙胞胎(做的是完全一樣的事情),他們所返回的式乙個物件的「官方」字串表示。
此時不禁有疑問,既然有了repr,為什麼還要('')?我也不懂。。。
在python核心程式設計上的解釋是:python中有很多函式與操作符的功能是相同的。(你tm是逗我,我問你為什麼要這麼做你告訴我你有很多都是這麼做的?!)之所以如此在某些場合函式迴避操作符更加適合使用,例如在處理類似函式這樣的可執行物件或者根據不同的資料項呼叫不同的函式處理時,函式會比操作符更加使用。(既然如此,為什麼還要設定(『』)操作符!坑我的把?
)並且在pyth
on中也有很多函式與操作符的功能相同,最為常見的是××和pow()完成的都是乘方運算。(出處:python核心程式設計第二版中文p66)
我的猜想是,guido在寫的時候一定是先定義的操作符,之後為了pythonic,才又定義了乙個相對直觀的函式。
好了吃瓜的大嬸們都回家吧~
ps:__str__和__repr__是類的內建函式,可重構,其作用是為了方便除錯。功能和str、repr沒有區別。
python重寫內建函式 python 內建函式
說明 zip 函式用於將可迭代的物件作為引數,將物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的列表。如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同,利用 號操作符,可以將元組解壓為列表。語法 zip iterable1,iterable2,引數 iterable 乙個或多...
python內建函式簡稱 Python內建函式詳解
此文參考python文件,然後結合自己的理解,寫下來,一方面方便自己,讓自己好好學習,順便回憶回憶 另一方面,讓喜歡的盆友也參考一下。經查詢,3.6版本總共有68個內建函式,主要分類如下 數 算 7個 型別轉換 24個 序列操作 8個 物件操作 9個 反射操作 8個 變數操作 2個 互動操作 2個 ...
python內建函式使用 python內建函式使用
eval函式執行python表示式,有返回值 eval 1 2 3 4 5 exec函式執行的是python語句,沒有返回值 exec print 123 將字串型別的 編碼.物件能夠通過exec語句來執行或者eval 進行求值,c只是編譯,不執行 code for i in range 10 pr...