python에서 xrange와range

서열을 말하자면, 우리가 가장 먼저 생각한 것은 질서 있는 원소로 구성된 집합이다.또한 모든 요소는 색인으로 유일한 하표를 가지고 있다.파이톤에는 많은 내계의 서열이 있다.원조tuple, 목록list, 문자열str 등을 포함합니다.위에서 언급한 서열 유형(list,tuple,str)은 서열 대상이 생성될 때 전문적인 메모리 공간을 개척하여 서열의 모든 요소를 저장해야 한다는 공통된 특징을 가지고 있다.다시 말하면 이 서열의 대상은 본질적으로 하나의 집합이다.예를 들어 다음 코드는 시퀀스 대상 s를 만들었습니다.이 대상의 서열을 만들 때, 서열의 세 요소 (정수 1, 2, 3) 를 저장할 메모리 공간을 열어야 합니다.
s=[1,2,3]  

그러나python 공식 문서의 정의에 따라 하나의 서열 대상은 모든 요소를 저장할 필요가 없습니다.일반적으로 하나의 서열 대상은 적어도 다음과 같은 두 가지 방법을 실현해야 한다. -len_방법이 방법은 서열의 길이, 즉 서열의 원소 개수를 되돌려줍니다. -getitem_방법이 방법에는 정형 매개 변수가 하나 있다. (index라고 기록해도 무방하다.)이것은 시퀀스에서 index로 표시된 요소의 값을 되돌려야 합니다.예를 들어 다음 코드는 시퀀스 형식을 정의합니다.
class MyRange:  
    def __init__(self, start, end):  
        self.start = start  
        self.end = end  

    def __len__(self):  
        return self.end - self.start  

    def __getitem__(self, index):  
        if index < 0 or index >= len(self):  
            raise IndexError  
        return index + self.start  

이것은 start에서end-1 사이의 모든 정수로 구성된 서열을 정의합니다.
  • 코드의 렌 방법은 서열의 길이를 되돌려줍니다.
  • 코드의getitem_방법은 서열의 index 요소를 되돌려줍니다.그중 10-11행은 index의 경계 여부를 판단한다.특히 10행에서 호출되는 렌 방법은 파이톤의 내장 방법으로 시퀀스 대상을 호출하는len_방법보고 싶어도,getitem_방법은 사실 서열 대상의 통항 공식을 실현하였다.다음 테스트 코드
  • myrange = MyRange(0, 10)  
    print myrange[9]  
    print myrange[10] 

    출력은 다음과 같습니다.
    Traceback (most recent call last):  
      File "test.py", line 25, in <module>  
        print myrange[10]  
      File "test.py", line 19, in __getitem__  
        raise IndexError  
    IndexError

    물론 파이톤에서 서열의 하표는 마이너스일 수 있습니다.따라서 Getitem 방법에 대해 다음과 같이 수정합니다.
    class MyRange:  
        def __getitem__(self, index):  
            index = index if index >= 0 else index + self.end  
            if index < 0 or index >= len(self):  
                raise IndexError  
            return index + self.start 
    

    테스트 코드
    myrange = MyRange(0, 10)  
    print myrange[-1]  
    print myrange[-2] 

    결과 내보내기
    9  
    8

    위에서 소개한 후에 우리는python에서range 방법과 xrange 방법의 차이를 쉽게 이해할 수 있다.
    range 방법은 list 대상을 되돌려줍니다. 이것은 전문적인 공간 저장 서열의 모든 요소를 개척해야 합니다.xrange 방법은 xrange 대상을 되돌려줍니다. 이것은 시퀀스 대상이지만, 시퀀스에 있는 요소를 저장하지 않습니다.그 실현 방법은 본고에서 소개한 MyRange 유형과 유사하다.
    따라서 서열만 읽으면 xrange 방법의 효율이 비교적 높다.그러나 서열을 바꾸는 원소가 필요하거나 서열에 원소를 삭제해야 한다면,range 방법으로list 대상을 생성할 수 있습니다.
    다음으로 이동:http://blog.csdn.net/hedan2013/article/details/55000018

    좋은 웹페이지 즐겨찾기