流暢的Python學(xué)習(xí)筆記

Chapter One

變量名類似____xxx____,以雙下劃線開頭,雙下劃線結(jié)尾的就是特殊變量,特殊方法的存在是為了被Python解釋器調(diào)用的

例如 ____getitem____ 這里我們查找key來(lái)得出value,d['a']背后的動(dòng)作就是____getitem____方法

# -*- coding:utf-8 -*-
d = {'a': 1, 'b': 2, 'c': 3}
print(d['a'])

print(d.__getitem__('a'))

print(d['a'] == d.__getitem__('a'))

執(zhí)行結(jié)果:

1
1
True

Python風(fēng)格紙牌

namedtuple()用來(lái)創(chuàng)建一個(gè)自定義的tuple對(duì)象,它和tuple一樣都是不可變的,它可以用屬性而不是索引來(lái)引用tuple的元素

# -*- coding:utf-8 -*-
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):
        """
        返回這套字牌的長(zhǎng)度
        """
        return len(self._cards)

    def __getitem__(self, position):
        """
        1、返回索引的位置
        2、__getitem__把[]操作self._cards,所以自動(dòng)支持切片操作
        """
        return self._cards[position]


beer_card = Card('7', 'diamonds')
# 用屬性來(lái)調(diào)用tuple的元素
print(beer_card.rank)
print(beer_card.suit)

# 創(chuàng)建實(shí)例
deck = FrenchDeck()
# 輸出deck長(zhǎng)度
print(len(deck))

# 索引出第一張牌
print(deck[0])
# 索引出最后一張紙牌
print(deck[-1])

執(zhí)行結(jié)果:

7
diamonds
52
Card(rank='2', suit='spades')
Card(rank='A', suit='hearts')
隨機(jī)抽取一張紙牌

這里用random.choice來(lái)隨機(jī)生成一張紙牌

from random import choice


print(choice(deck))
print(choice(deck))

執(zhí)行結(jié)果:

Card(rank='9', suit='spades')
Card(rank='Q', suit='clubs')
切片(slicing)

____getitem____()方法把[]交給了self._cards,所以類得對(duì)象是支持切片操作的

  • 索引出前三張牌
  • 抽出索引是12的那張牌,然后每隔13張牌拿一張
print(deck[:3])
print(deck[12::13])

執(zhí)行結(jié)果:

[Card(rank='2', suit='spades'), Card(rank='3', suit='spades'), Card(rank='4', suit='spades')]
[Card(rank='A', suit='spades'), Card(rank='A', suit='diamonds'), Card(rank='A', suit='clubs'), Card(rank='A', suit='hearts')

迭代

實(shí)現(xiàn)____getitem____()后,這一副牌就是可迭代的了

for card in deck:
    print(card)

執(zhí)行結(jié)果:

Card(rank='2', suit='spades')
Card(rank='3', suit='spades')
Card(rank='4', suit='spades')
Card(rank='5', suit='spades')
Card(rank='6', suit='spades')
Card(rank='7', suit='spades')
Card(rank='8', suit='spades')

.............
.............

也可以反向迭代,使用reversed()方法

for card in reversed(deck):
    print(card)
IN運(yùn)算符

迭代通常都是隱式的,一個(gè)集合類型沒有實(shí)現(xiàn)____contains____方法,那么in運(yùn)算符就會(huì)按順序做一次迭代搜索

print(Card('Q', 'hearts') in deck)
print(Card('7', 'beasts') in deck)
字符串表示形式

____str____, ____repr____兩者都是字符串表示形式

兩者的區(qū)別:
____str____是在str()函數(shù)被使用,或是在print函數(shù)打印一個(gè)對(duì)象的時(shí)候被調(diào)用的,是給終端用戶看的

____repr____,如果一個(gè)對(duì)象沒有____str____函數(shù),而Python又需要調(diào)用它的時(shí)候,解釋器會(huì)用____repr____作為替代,它又可以方便我們調(diào)試和記錄日志

歡迎訪問Treehl的博客
GitHub

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 筆者使用python為3.41.字典字典中取不存在的值的時(shí)候,會(huì)拋出keyerror錯(cuò)誤,那么怎么實(shí)現(xiàn)返回默認(rèn)值呢...
    戰(zhàn)五渣_lei閱讀 528評(píng)論 0 0
  • pyton review 學(xué)習(xí)指南 https://www.zhihu.com/question/29138020...
    孫小二wuk閱讀 1,181評(píng)論 0 2
  • python學(xué)習(xí)筆記 聲明:學(xué)習(xí)筆記主要是根據(jù)廖雪峰官方網(wǎng)站python學(xué)習(xí)學(xué)習(xí)的,另外根據(jù)自己平時(shí)的積累進(jìn)行修正...
    renyangfar閱讀 3,239評(píng)論 0 10
  • ??? ?? ??? ??? ??? ? ?? !???? 天氣極好 也終于收到了護(hù)照 用新賬號(hào)弄了漂亮的照片 ???...
    舟度閱讀 194評(píng)論 0 0
  • 我們?cè)诼殘?chǎng)中求職的時(shí)候,面試官就是老大,只要不和他的心意,絕對(duì)不能成功入職,以下就是面試官最不喜歡的六種面試者。不...
    樂仲雨閱讀 568評(píng)論 0 0

友情鏈接更多精彩內(nèi)容