【Python學習日記】B站小甲魚:定製容器和迭代器
阿新 • • 發佈:2020-09-14
協議 Python中的協議更像一種指南
如果定製的容器是不變的,只需要定義len()和getitem()方法
如果希望定製的容器是可變的,除了定義len()和getitem()而外,還需要定義setitem()和delitem()方法
len() 返回容器中元素的個數
getitem() 獲得容器中指定元素, 類似self()
setitem() 設定容器中指定元素, 類似set(key) = value
delitem() 刪除容器中指定元素, 類似del self(key)
練習:要求自定義一個不可變的列表,返回其中元素的呼叫次數
class Countlist:def __init__(self, *args): self.values = [x for x in args] self.count = {}.fromkeys(range(len(self.values)), 0) def __len__(self): return len(self.values) def __getitem__(self, key): self.count[key] += 1 return self.values[key] c1 = Countlist(1, 3, 5, 7, 9) c2= Countlist(2, 4, 6, 8, 10) print(c1[1]) print(c2[1]) print(c1[1]+c2[1]) print(c1.count)
輸出結果是
3
4
7
{0: 0, 1: 2, 2: 0, 3: 0, 4: 0}
迭代
iter() 生成迭代器
next() 迭代器返回下一個值
比如
it = iter('Hydra') print(next(it)) while True: try: each = next(it) except StopIteration: break print(each)
每一次next()就可以輸出一個字元從H到a,結束以後再next()就會報錯。這裡的it相當於是一個迭代器
相當於for語句
string = 'Hydra' for each in string: print(each)