亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

カスタムコンテナ(コンテナ)

前の章での紹介により、Python では一般的なコンテナ タイプが dict、tuple、list、string であることがわかりました。コンテナ化されたコンテナと不変コンテナの概念についても説明します。このうち、タプルと文字列は不変コンテナであり、辭書とリストは可変コンテナです??蓧浈偿螗匹施`と不変コンテナーの違いは、不変コンテナーに値が割り當てられると、その中の要素は変更できないことです。もちろん、詳しい紹介については、寫真と文章を交えた前回の記事を読み返していただくことも可能です。

それでは最初に質問がありますが、これらのデータ構造は私たちが開発して使用するのに十分ですか?十分ではない場合、またはこれらの基本的なコンテナだけでは解決できない特別なニーズがある場合はどうすればよいでしょうか?

このとき、コンテナをカスタマイズする必要があるのですが、どうすればよいでしょうか?

を追加します #self[key] = valueを実行する場合#呼び出しは __setitem__(self, key, value) このメソッドですdel self[key] メソッドを実行する場合 #実際に呼び出されるメソッドは __delitem__(self, key)コンテナをコンテナ內の x に対して実行できるようにしたい場合: または iter(container)イテレータを返す __iter__(self) を実裝する必要があります
関數説明
カスタム不変コンテナタイプ定義が必要_ _len__ および __getitem__メソッド
カスタマイズされた変數型コンテナ不変コンテナ型に基づいて定義 __setitem__ および __delitem__
カスタム データ型が必要です反復する必要があります __iter__ を定義する必要があります
カスタム コンテナの長さを返します 実裝する必要があります_ _len__(self)
カスタム コンテナーは self[key] を呼び出すことができます。キーのタイプが間違っている場合、TypeError がスローされます。キーに対応する値を返せない場合、このメソッドは ValueError __getitem__(self, key) を実裝する必要があります
上記の魔法のメソッドを使用して Haskell 言語でデータ構造を実裝する方法を見てみましょう:

#!/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]


學び続ける