Fluentpython 特殊方法
特殊方法的存在是為了被 Python 解釋器調(diào)用的
Python 語(yǔ)言參考手冊(cè)中的“Data Model”(https://docs.python.org/3/reference/datamodel.html)一章列出了83 個(gè)特殊方法的名字恩闻,其中 47 個(gè)用于實(shí)現(xiàn)算術(shù)運(yùn)算愤钾、位運(yùn)算和比較操
作。表 1-1 和表 1-2 列出了這些方法的概況伍玖。
表1-2:跟運(yùn)算符相關(guān)的特殊方法
為什么len不是普通方法
“實(shí)用勝于純粹≈油遥”
如果 x 是一個(gè)內(nèi)置類(lèi)型的實(shí)例性昭,那么 len(x) 的速度會(huì)非常快屠尊。背后的原因是 CPython 會(huì)直接從一個(gè) C 結(jié)構(gòu)體里讀取對(duì)象的長(zhǎng)度旷祸,完全不會(huì)調(diào)用任何方法。獲取一個(gè)集合中元素的數(shù)量是一個(gè)很常見(jiàn)的操作讼昆,在str托享、list、memoryview 等類(lèi)型上浸赫,這個(gè)操作必須高效.
計(jì)算 s 中 x 出現(xiàn)的次數(shù): s.count(x)闰围。注意這里的 s 是一個(gè)序列類(lèi)型。
__str__ 和 __repr__的區(qū)別:
>>> print str("Hello, world!")
Hello, world!
>>> print str(1000L)
1000
>>> str("Hello, world!")
'Hello, world!' # 字符串轉(zhuǎn)換之后仍然是字符串
>>> str(1000L)
'1000'
>>> print repr("Hello, world!")
'Hello, world!'
>>> print repr(1000L)
1000L
>>> repr("Hello, world!")
"'Hello, world!'"
>>> repr(1000L)
'1000L'