zoukankan      html  css  js  c++  java
  • (一)python 数据模型

    1、通过实现特殊方法,自定义类型可以表现的跟内置类型一样;

        如下代码,实现len, getitem,可使自定义类型表现得如同列表一样。

    import collections
    from random import choice
    
    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 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 = dict(spades=3, hearts=2, diamonds=1, clubs=0)
    def spade_hith(card):
        rank_value = FrenchDeck.ranks.index(card.rank)
        # print(rank_value)
        # print(suit_values[card.suit])
        return rank_value * len(suit_values) + suit_values[card.suit]
    
    if __name__ == '__main__':
        deck = FrenchDeck()
        #card = choice(deck)
        #print(card)
        for card in sorted(deck, key=spade_hith):
            print(str(card))
            print(repr(card))

     2、repr和str

         (1) __repr__所返回的字符串应该准确(%r),无歧义,并且尽可能表达出如何用代码创建出这个被创建的对象,如repr(v);输出Vector(3, 4)

         (2) __str__在str函数被调用(%s),或者打印一个对象的时候被调用,如str(v);输出(3,4)

         (3)默认实现打印对象时,两者没有什么区别

        (4)两个特殊方法,只想实现一个时,__repr__是更好的选择,因为如果一个对象没有__str__函数,而python解释器又需要调用时,会用__repr__替代。

          两者的区别,参考:https://stackoverflow.com/questions/1436703/difference-between-str-and-repr

        

  • 相关阅读:
    ubuntu16.04上安装深度学习环境
    QQ音乐付费音乐下载的demo
    python列表按比例或长度拆分
    docker 使用gpu启动及tf限额
    python apscheduler was missed by
    k8s中使用gpu的部署方案
    从字符串中找出最大的数字串,字符串中可以带小数点。--python实现
    linux中批量删除带空格的文件
    tornado中使用python3原生事件循环asyncio
    mysql DATE_FORMAT FROM_UNIXTIME 的区别
  • 原文地址:https://www.cnblogs.com/573177885qq/p/9828645.html
Copyright © 2011-2022 走看看