《Fluent Python》讀書(shū)筆記-The Python Data Model

概覽

????本章的重點(diǎn)就是展示Pythonic实撒,可以理解為python編程的一種風(fēng)格,比如作者例舉的python是用len(collection) 而不是用collection.len()恳谎。
???? Pythonic的關(guān)鍵就是Python data model。作者認(rèn)為data model可以想象為對(duì)python作為一種框架的描述允青。data model定義了python語(yǔ)言中各個(gè)組成部分的接口例嘱。
???? 這些接口的定義,就是作者提到的special method(特殊方法)由境。特殊方法名首尾都是雙下劃線棚亩,例如__getitem__。python解釋器調(diào)用特殊方法來(lái)完成基礎(chǔ)的對(duì)象操作藻肄。通過(guò)在自定義類(lèi)中實(shí)現(xiàn)特殊方法蔑舞,也可以使讓用戶(hù)的自定義類(lèi)像python基礎(chǔ)對(duì)象一樣進(jìn)行操作。
???? 如何實(shí)現(xiàn)這些特殊方法嘹屯,將是后續(xù)貫穿全書(shū)的內(nèi)容攻询。

示例

???? 下面展示了一個(gè)很Pythonic的例子,看了之后感覺(jué)自己之前的python代碼太過(guò)程語(yǔ)言化了州弟。

import collections

Card = collections.namedtuple('Card', ['rank', 'suit'])

class FrenchDeck:
    ranks = [str(n) for n in range(2, 11)] + list('JQKA') 
    suits = 'spades diamonds clubs hearts'.split()

    def __init__(self):
        self._cards = [Card(rank, suit) for suit in self.suits
                                        for rank in self.ranks]

    def __len__(self):
        return len(self._cards)

    def __getitem__(self, position): 
        return self._cards[position]

???? 通過(guò)定義了__len____getitem__就可以像操作list一樣操作FrenchDeck類(lèi)钧栖。

>>> deck = FrenchDeck()
>>> len(deck)
52
>>> deck[0]
Card(rank='2', suit='spades')
>>> deck[:3]
[Card(rank='2', suit='spades'), Card(rank='3', suit='spades'), Card(rank='4', suit='spades')]
>>> Card('Q', 'hearts') in deck 
True

???? 可以通過(guò)這個(gè)例子看到,通過(guò)實(shí)現(xiàn)特殊方法可以帶來(lái)兩個(gè)好處:

  1. 可以讓你的類(lèi)有和標(biāo)準(zhǔn)庫(kù)一樣定義的通用接口
  2. 可以從python標(biāo)準(zhǔn)庫(kù)里受益

__repr__和__str__

>>> import datetime
>>> today = datetime.date.today()
>>> str(today)
'2019-01-16'
>>> repr(today)
'datetime.date(2019, 1, 16)'
>>> a = '1'
>>> str(a)
'1'
>>> repr(a)
"'1'"
  1. 在占位符里repr使用%r婆翔,str使用%s
  2. str返回的結(jié)果被用于print方法拯杠,側(cè)重于好的格式展示給終端用戶(hù)
  3. repr一般是能和重建對(duì)象的源代碼相匹配
  4. 當(dāng)__str__沒(méi)有實(shí)現(xiàn)的時(shí)候,python將自動(dòng)調(diào)用__repr__
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末啃奴,一起剝皮案震驚了整個(gè)濱河市潭陪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌最蕾,老刑警劉巖依溯,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異瘟则,居然都是意外死亡黎炉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)醋拧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)慷嗜,“玉大人,你說(shuō)我怎么就攤上這事丹壕∏煨担” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵雀费,是天一觀的道長(zhǎng)干奢。 經(jīng)常有香客問(wèn)我盏袄,道長(zhǎng)忿峻,這世上最難降的妖魔是什么薄啥? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮逛尚,結(jié)果婚禮上滤钱,老公的妹妹穿的比我還像新娘蚕苇。我一直安慰自己履恩,他們只是感情好切心,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布片吊。 她就那樣靜靜地躺著绽昏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪俏脊。 梳的紋絲不亂的頭發(fā)上全谤,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音爷贫,去河邊找鬼认然。 笑死补憾,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的卷员。 我是一名探鬼主播盈匾,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼毕骡!你這毒婦竟也來(lái)了削饵?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤未巫,失蹤者是張志新(化名)和其女友劉穎窿撬,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體叙凡,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡劈伴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了狭姨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宰啦。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖饼拍,靈堂內(nèi)的尸體忽然破棺而出赡模,到底是詐尸還是另有隱情,我是刑警寧澤师抄,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布漓柑,位于F島的核電站,受9級(jí)特大地震影響叨吮,放射性物質(zhì)發(fā)生泄漏辆布。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一茶鉴、第九天 我趴在偏房一處隱蔽的房頂上張望锋玲。 院中可真熱鬧,春花似錦涵叮、人聲如沸惭蹂。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盾碗。三九已至,卻和暖如春舀瓢,著一層夾襖步出監(jiān)牢的瞬間廷雅,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留航缀,地道東北人商架。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像谬盐,于是被迫代替她去往敵國(guó)和親甸私。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354