第一章 python数据模型

1、扑克牌

import collections
Card = collections.namedtuple('Card',['rank','suit'])
class Frenchdeck:
    ranks = [str(i) for i in range(2,11)]+list('JQKA')
    suits = ['黑桃','红心','梅花','方块']
    def __init__(self):
        self._cards=[Card(rank,suit) for rank in self.ranks for suit in self.suits]
    def __len__(self):
        return len(self._cards)
    def __getitem__(self,position):
        return self._cards[position]
suit_values={'黑桃':3,'红心':2,'梅花':1,'方块':0}
deck=Frenchdeck()
def cards_values(card):
    rank_value=Frenchdeck.ranks.index(card.rank)
    return rank_value*len(suit_values)+suit_values[card.suit]
for card in sorted(deck,key=cards_values,reverse=True):
    print (card)

2、以上collection,sorted需注意。

sorted(iteration,key=Function)

Function 返回一个值作为比较依据
3、Special method,also called magic method or dunder method.


第一章 python数据模型_第1张图片
图片.png

图片.png

4、自定义向量类型

class Vector:
    def __init__(self,x=0,y=0):
        self.x=x
        self.y=y
    def __add__(self,other):
        x=self.x+other.x
        y=self.y+other.y
        return Vector(x ,y)
    def __abs__(self):
        return self.x+self.y
    def __repr__(self):
        return 'Vector(%r,%r)'% (self.x , self.y)

5 、why len() not .len?
len()直接调用基于C的内置方法而不是自定义方法,但是通过对len的定义又可以自定义某个类的len(),从而在效率和可更改性上达到平衡,而且一统的模式更加符合美学,即Zen of Python.

你可能感兴趣的:(第一章 python数据模型)