찾다
  • 로그인
  • 가입
비밀번호 재설정 성공

당신이 관심을 갖고 있는 프로젝트를 팔로우하고 그들에 관한 최신 뉴스를 맛보세요

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

이전 장의 소개 이후 우리는 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에서 데이터 구조를 구현합니다. 언어:
새로운 파일
시사 Clear
  • 코스 추천
  • 코스웨어 다운로드