1. 程式人生 > 實用技巧 >【Python學習日記】B站小甲魚:定製容器和迭代器

【Python學習日記】B站小甲魚:定製容器和迭代器

協議  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)