>백엔드 개발 >파이썬 튜토리얼 >Python의 `range()` 객체는 어떻게 매우 넓은 범위에 대해 거의 즉각적인 멤버십 확인을 달성합니까?

Python의 `range()` 객체는 어떻게 매우 넓은 범위에 대해 거의 즉각적인 멤버십 확인을 달성합니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-07 22:57:14471검색

How Does Python's `range()` Object Achieve Near-Instantaneous Membership Checks for Extremely Large Ranges?

Python의 Range 객체의 놀라운 속도

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.