Python 3에서 range() 함수는 숫자 범위를 나타내는 객체를 생성합니다. 이 개체는 메모리에 전체 범위를 생성하지 않는다는 점에서 기존 생성기와 다릅니다. 대신 요청에 따라 숫자를 생성하므로 넓은 범위에 대해 속도가 훨씬 빨라집니다.
문제:
직관적으로 숫자가 범위 내에 속하는지 확인하려면 다음을 반복해야 합니다. 해당 범위의 모든 값. 그러나 Python 3 range() 객체는 광범위한 범위에 대해서도 거의 즉시 검사를 수행하여 이러한 기대를 뛰어넘습니다.
해결책:
range() 객체 전체 범위를 물리적으로 저장하지 않습니다. 오히려 시작, 종료 및 단계 값을 보유합니다. 멤버십 테스트 시 해당 값만을 기준으로 결과를 계산합니다. 이 계산은 C 코드에서 실행되므로 효율성이 높습니다.
비교:
다음 Python 코드는 range() 개체의 성능을 다음과 비교합니다. 즉석에서 숫자를 생성하는 사용자 정의 구현:
def my_crappy_range(N): i = 0 while i < N: yield i i += 1 1_000_000_000_000_000 in range(1_000_000_000_000_001) 1_000_000_000_000_000_000_000 in range(1_000_000_000_000_000_000_001) for number in my_crappy_range(100): print(number)
range() 객체는 거의 즉시 검사를 수행하는 반면, 사용자 정의 구현은 시간이 걸립니다. 훨씬 더 길어집니다.
추가 최적화:
range() 객체는 또한 포함 테스트를 최적화하는 contains 후크를 구현합니다. 이 최적화를 통해 객체는 범위의 크기에 관계없이 거의 일정한 시간 내에 숫자가 해당 범위 내에 있는지 확인할 수 있습니다.
결론:
Python 3 범위( ) 객체의 뛰어난 속도는 효율적인 데이터 구조와 최적화된 작업으로 인해 발생합니다. 최소한의 정보를 저장하고 요청된 값을 즉시 계산하므로 광범위한 범위에 대해서도 거의 즉각적인 격리 테스트가 가능합니다.
위 내용은 Python의 `range()` 객체는 어떻게 매우 넓은 범위에 대해 거의 즉각적인 멤버십 확인을 달성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!