【学习笔记】流畅的Python第二版【第一章】
生活随笔
收集整理的這篇文章主要介紹了
【学习笔记】流畅的Python第二版【第一章】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一摞Python風格的紙牌
#!/usr/bin/env python3import collections from random import choice# namedtuple自從python2.6開始就加入到了Python里,用以構建只有少數屬性但沒有方法的對象,類似于C/C++里面的結構體 Card = collections.namedtuple('Card', ['rank','suit'])def main():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, idx):return self._cards[idx]deck = FrenchDeck()# 打印撲克牌長度print(len(deck))# 抽取第一張牌print(deck[0])# 抽取最后一張牌print(deck[-1])# 隨機抽取一張牌,使用random.choice方法,choice(seq)中傳入的值可以是列表,數組,字符串。print(choice(deck))# 查看一摞牌最上面3張和只看牌面是A的牌的操作print(deck[:3])# 先抽出索引是12的那張牌,然后每隔13張拿1張print(deck[12::13])# 正向迭代for card in deck:print(card)# 反向迭代for card in reversed(deck):print(card)# 對一摞撲克牌排序,2最下,A最大,黑桃最大,紅桃次之,方塊再次,梅花最小。梅花2的大小是0,黑桃A的大小是51.suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0)def spades_high(card):rank_value = FrenchDeck.ranks.index(card.rank)return rank_value*len(suit_values)+suit_values[card.suit]for car in sorted(deck, key=spades_high):print(car)if __name__ == '__main__':main()如何使用特殊方法
模擬數值類型
#!/usr/bin/env python3from math import hypot def main():class Vector:def __init__(self, x=0, y=0):self.x = xself.y = ydef __repr__(self):return 'Vector(%r, %r)'%(self.x, self.y)def __abs__(self):return hypot(self.x, self.y)def __bool__(self): # 模非0,顯示truereturn bool(abs(self)) # 可以用 return bool(self.x or self.y) 代替def __add__(self, other):x = self.x + other.xy = self.y + other.yreturn Vector(x,y)def __mul__(self, scalar):return Vector(self.x*scalar, self.y*scalar)v = Vector(3,4)# 查看模數print(abs(v))# 向量與標量相乘v = v*3print(v)# 兩個向量相加v1 = Vector(3,4)v2 = Vector(1,1)print(v1+v2)if __name__ == '__main__':main()注意
__repr__ 和 __str__的區別在于,后者是在 str() 函數被使用, 或是在用 print
函數打印一個對象的時候才被調用的,并且它返回的 字符串對終端用戶更友好。 如果你只想實現這兩個特殊方法中的一個,__repr__
是更好的選擇, 因為如果一個對象沒有 __str__函數,而 Python又需要調用它的時 候,解釋器會用 __repr__作為替代。
總結
以上是生活随笔為你收集整理的【学习笔记】流畅的Python第二版【第一章】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 流畅的python 18章
- 下一篇: Python深浅拷贝辨析