カスタムコンテナ(コンテナ)
前の章での紹介により、Python では一般的なコンテナ タイプが dict、tuple、list、string であることがわかりました。コンテナ化されたコンテナと不変コンテナの概念についても説明します。このうち、タプルと文字列は不変コンテナであり、辭書とリストは可変コンテナです??蓧浈偿螗匹施`と不変コンテナーの違いは、不変コンテナーに値が割り當てられると、その中の要素は変更できないことです。もちろん、詳しい紹介については、寫真と文章を交えた前回の記事を読み返していただくことも可能です。
それでは最初に質問がありますが、これらのデータ構造は私たちが開発して使用するのに十分ですか?十分ではない場合、またはこれらの基本的なコンテナだけでは解決できない特別なニーズがある場合はどうすればよいでしょうか?
このとき、コンテナをカスタマイズする必要があるのですが、どうすればよいでしょうか?
関數 | 説明 |
カスタム不変コンテナタイプ | 定義が必要_ _len__ および __getitem__メソッド |
カスタマイズされた変數型コンテナ | 不変コンテナ型に基づいて定義 __setitem__ および __delitem__ |
カスタム データ型が必要です反復する必要があります | __iter__ を定義する必要があります |
カスタム コンテナの長さを返します | 実裝する必要があります_ _len__(self) |
カスタム コンテナーは self[key] を呼び出すことができます。キーのタイプが間違っている場合、TypeError がスローされます。キーに対応する値を返せない場合、このメソッドは ValueError | __getitem__(self, key) を実裝する必要があります |
#呼び出しは __setitem__(self, key, value) このメソッドです | |
#実際に呼び出されるメソッドは __delitem__(self, key) | |
イテレータを返す __iter__(self) を実裝する必要があります |
#!/usr/bin/env python3 # -*- coding: UTF-8 -*- class FunctionalList: ''' 實現(xiàn)了內置類型list的功能,并豐富了一些其他方法: head, tail, init, last, drop, take''' def __init__(self, values=None): if values is None: self.values = [] else: self.values = values def __len__(self): return len(self.values) def __getitem__(self, key): return self.values[key] def __setitem__(self, key, value): self.values[key] = value def __delitem__(self, key): del self.values[key] def __iter__(self): return iter(self.values) def __reversed__(self): return FunctionalList(reversed(self.values)) def append(self, value): self.values.append(value) def head(self): # 獲取第一個元素 return self.values[0] def tail(self): # 獲取第一個元素之后的所有元素 return self.values[1:] def init(self): # 獲取最后一個元素之前的所有元素 return self.values[:-1] def last(self): # 獲取最后一個元素 return self.values[-1] def drop(self, n): # 獲取所有元素,除了前N個 return self.values[n:] def take(self, n): # 獲取前N個元素 return self.values[:n]