커스텀 컨테이너(컨테이너)

이전 장의 소개 이후 우리는 Python에서 일반적인 컨테이너 유형이 dict, tuple, list, string이라는 것을 알았습니다. 컨테이너화된 컨테이너와 불변 컨테이너의 개념도 언급됩니다. 그 중 튜플과 스트링은 불변 컨테이너이고, 딕셔너리와 리스트는 가변 컨테이너이다. 변경 가능한 컨테이너와 불변 컨테이너의 차이점은 변경 불가능한 컨테이너에 값이 할당되면 그 안의 요소를 수정할 수 없다는 것입니다. 물론 자세한 소개를 보려면 사진과 텍스트가 포함된 이전 기사를 다시 읽어보면 됩니다.

먼저 질문이 있습니다. 이러한 데이터 구조가 우리가 개발하고 사용하기에 충분한가요? 충분하지 않거나 이러한 기본 용기만으로는 해결할 수 없는 특별한 요구 사항이 있는 경우 어떻게 해야 합니까?

이때 컨테이너를 커스터마이징해야 하는데 어떻게 해야 할까요?

호출되는 메소드는 __setitem__(self, key, value)실제로 호출되는 메소드는 __delitem__(self, key)
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
class FunctionalList:
    ''' 实现了内置类型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]
함수 설명
사용자 정의 불변 컨테이너 유형 __len__ 및 __getitem__ 메소드 정의 필요
사용자 정의 가변 유형 컨테이너 불변 컨테이너 유형을 기준으로 추가됨 정의 __setitem__ 및 __delitem__
사용자 정의 데이터 유형을 반복해야 합니다__iter__
사용자 정의 컨테이너의 길이를 반환해야 합니다.__len__(self)를 구현해야 합니다.
사용자 정의 컨테이너는 self[key]를 호출할 수 있습니다. 키 유형이 잘못되면 TypeError가 발생합니다. 키에 해당하는 값을 반환할 수 없으면 메서드에서 ValueError를 발생시켜야 합니다. self[ key를 실행할 때 __getitem__(self, key)를 구현해야 합니다. ] = value
del self[key] 메소드가 실행될 때
컨테이너가 컨테이너에서 x에 대해 실행되도록 하거나 iter(container)를 사용하려면 __iter__(self)를 구현해야 합니다. 이 메서드는 반복자를 반환합니다. 위의 마법 메서드를 사용하는 방법을 살펴보겠습니다. Haskell에서 데이터 구조를 구현합니다. 언어:
지속적인 학습
  • 코스 추천
  • 코스웨어 다운로드
현재 코스웨어를 다운로드할 수 없습니다. 현재 직원들이 정리하고 있습니다. 앞으로도 본 강좌에 많은 관심 부탁드립니다~