想让自己的python代码更加Pythonic吗,我就来带大家研究研究collections模块
在流程的python这本书中,有一点点的叙述,但是想更加深入的去了解,那就得自己查资料了,我也顺便把自己整理的分享出来.
一.namedtuple
可命名元组,给元组每个元素起一个名字,这样就可以通过名字来访问元组里的元素,增强了可读性
下面是一个纸牌的例子:
from collections import * Card = namedtuple('Card', ['rank', 'suit']) class FrenchDeck: ranks = [str(n) for n in range(2, 11)] + list('JDKA') suits = 'spades diamonds clubs heaerts'.split() def __init__(self): # ranks = [str(n) for n in range(2, 11)] + list('JDKA') # suits = 'spades diamonds clubs heaerts'.split() self._cards = [Card(rank, suit) for rank in ranks for suit in suits] def __len__(self): return len(self._cards) def __getitem__(self, position): return self._cards[position] if __name__ == '__main__': deck = Card('7', 'diamonds') deck1 = FrenchDeck() print(deck1.__len__()) print(deck1.__getitem__(24)) print(deck1[0]) print(deck1[1:9])
在namedtuple的这个例子中用到了__getitem__方法,可自行查找,这个是很好理解的。
这里面的有些部分对新手来说不好理解,我就再啰嗦一点,
在这里面有个遍历的过程,大概就是这样,运行一下下面的代码就懂了
a = [(r, s) for r in range(1, 4) for s in range(2, 8)] print(a)