Fluent Python-1(collections.namedtuple & 魔術方法的使用)

  • 2019 年 10 月 7 日
  • 筆記

版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/y_silence_/article/details/101126740

涉及知識點

  • collections — Container datatypes
  • collections.namedtuple
  • 特殊方法
  • 切片操作
  • 反向迭代
  • 排序函數(sorted)

程式碼

import collections # collections — Container datatypes    # namedtuple() Factory Function for Tuples with Named Fields  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]    beer_card = Card('7', 'diamonds')  print('beer_card', beer_card)    # 通過特殊方法 __getitem__ 進行取值  deck = FrenchDeck()  print('deck[-1]', deck[-1])    # 切片操作獲取值,通過特殊方法 __getitem__ 進行取值  print('deck[:3]', deck[:3]) # 獲取最前面 3 張牌  print('deck[12::13]', deck[12::13]) # 抽出索引為 12 的那張牌,然後每隔 13 張牌拿一張    # 反向迭代  for card in reversed(deck):      print('card_reversed', card)    # 排序撲克  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 card in sorted(deck, key=spades_high):      print('spades_high,card', card)

參考資料

總結

「等到用到的時候我再去學。」 可以學的東西就被局限到你需要用到這個條件下