Python 3에서 range(n)의 놀라운 성능
Python 3에서 범위 생성기 함수는 다음과 같은 경우 탁월한 속도로 알려져 있습니다. 해당 범위 내에서 많은 수의 구성원을 확인합니다. 반복해야 할 것처럼 보이는 엄청난 수의 정수를 고려하면 이러한 동작은 직관적이지 않은 것처럼 보입니다. 범위 개체는 어떻게 이 놀라운 효율성을 달성합니까?
스마트 시퀀스: Python 3의 범위
기대와는 달리 Python 3의 범위 개체는 사전에 전체 범위의 정수를 생성합니다. 대신 반복 중에 필요할 때 숫자를 계산하는 스마트 시퀀스 역할을 합니다. 시작점, 중지점 및 단계 크기만 저장하므로 필요에 따라 개별 값이나 하위 범위를 계산할 수 있습니다.
최적화 포함 방법
범위 객체는 고도로 최적화된 contains 메소드도 구현합니다. 이 방법은 전체 시퀀스를 스캔하지 않고 주어진 숫자가 범위 내에 있는지 평가합니다. 대신 시작점, 중지점 및 단계 크기와 관련된 수학적 계산을 수행합니다. 이 계산은 최적화된 C 코드에서 실행되므로 거의 일정한 시간 복잡도가 발생합니다.
단순화된 범위 객체의 구현 예
개념을 설명하기 위해 단순화된 자체 범위 객체 구현:
class my_range: # ... other methods as described in the question and answer ... def __contains__(self, num): if self.step < 0: if not (self.stop < num <= self.start): return False else: if not (self.start <= num < self.stop): return False return (num - self.start) % self.step == 0
이 예는 효율적인 범위 객체의 기본 원칙을 보여줍니다. 포함 범위 개체의 메서드입니다. 전체 범위를 반복하지 않고 범위 소속을 계산합니다.
요약하면 Python 3의 범위 개체는 주문형 계산과 최적화된 contains 메서드를 결합하여 신중하게 설계된 데이터 구조입니다. 이러한 설계를 통해 광범위한 범위 내에서 많은 수에 대한 격리 검사를 놀라운 효율성으로 수행할 수 있습니다.
위 내용은 Python 3의 `range()`는 어떻게 큰 숫자에 대한 빠른 멤버 확인을 달성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!