range()
실제로 파이썬 3의 객체 유형 인 함수 는 생성기와 비슷한 내용을 즉시 생성 한다는 것을 이해합니다 .
이 경우 다음 줄이 시간이 많이 걸릴 것이라고 예상했을 것입니다.
1000000000000000 in range(1000000000000001)
또한 : 내가 추가하는 0의 수에 관계없이 계산에는 거의 동일한 시간 (기본적으로 순간)이 소요됩니다.
나는 또한 이와 같은 것을 시도했지만 계산은 거의 즉각적입니다.
1000000000000000000000 in range(0,1000000000000000000001,10) # count by tens
내 자신의 범위 기능을 구현하려고하면 결과가 좋지 않습니다!
def my_crappy_range(N):
i = 0
while i < N:
yield i
i += 1
return
range()
후드 아래 에서 물체가 너무 빨라지는 것은 무엇입니까?
Martijn Pieters의 답변 은 완전성으로 선정되었지만 Python 3에서 본격적인 시퀀스 가되는 의미 와 Python 구현 에서 함수 최적화 에 대한 잠재적 불일치에 관한 정보 / 경고에 대한 좋은 토론을위한 abarnert의 첫 번째 답변 을 참조하십시오 . abarnert의 다른 대답 은 좀 더 자세하게 설명하고 Python 3의 최적화 뒤에 숨겨진 역사에 관심이있는 사람들을위한 링크를 제공합니다 ( Python 2 의 최적화 부족 ). poke 와 wim의 답변 은 관심있는 사람들을위한 관련 C 소스 코드와 설명을 제공합니다.range
__contains__
xrange
range
발전기 라고 말 했어요 ?
xrange
과 동일range
하지 않습니까 ?
xrange()
객체에는 __contains__
메소드 가 없으므로 항목 검사가 모든 항목을 반복해야합니다. 플러스 몇 가지 다른 변화가있다 range()
는 슬라이스를 지원 (다시 돌려처럼, range
이 또한 지금 개체) 및 count
및 index
방법과 호환되도록 collections.Sequence
ABC.
bool
또는long
유형 인 경우에만 해당 되며 다른 객체 유형에서는 미쳐 버립니다. 로 시도 :100000000000000.0 in range(1000000000000001)