반응형
range ()가 Python 3.3의 생성기 인 경우 범위에서 next ()를 호출 할 수없는 이유는 무엇입니까?
아마도 나는 웹상의 잘못된 정보의 희생양이되었을 지 모르지만, 단지 내가 무언가를 오해했을 가능성이 더 높다고 생각합니다. 지금까지 배운 내용에 따르면 range ()는 생성기이고 생성기는 반복기로 사용할 수 있습니다. 그러나이 코드 :
myrange = range(10)
print(next(myrange))
이 오류가 발생합니다.
TypeError: 'range' object is not an iterator
내가 여기서 무엇을 놓치고 있습니까? 나는 이것이 0을 인쇄하고에서 다음 값으로 진행할 것으로 예상했습니다 myrange
. 저는 Python을 처음 사용하므로 다소 기본적인 질문에 대한 사과를 받아들이십시오.하지만 다른 곳에서는 좋은 설명을 찾을 수 없습니다.
range
불변의 반복 가능한 객체의 클래스입니다. 반복 동작은 list
s 와 비교할 수 있습니다 next
. 직접 호출 할 수 없습니다 . 사용하여 반복자를 가져와야합니다 iter
.
그래서 아니, range
발전기가 아닙니다.
"왜 직접 반복 가능하게 만들지 않았습니까?"라고 생각할 수 있습니다. 글쎄, range
s는 그렇게 할 수없는 몇 가지 유용한 속성을 가지고 있습니다.
- 변경이 불가능하므로 사전 키로 사용할 수 있습니다.
- 그들은이
start
,stop
그리고step
(파이썬 3.3부터) 속성count
과index
방법을 그들은 지원in
,len
및__getitem__
작업. - 동일한 작업을
range
여러 번 반복 할 수 있습니다 .
>>> myrange = range(1, 21, 2)
>>> myrange.start
1
>>> myrange.step
2
>>> myrange.index(17)
8
>>> myrange.index(18)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 18 is not in range
>>> it = iter(myrange)
>>> it
<range_iterator object at 0x7f504a9be960>
>>> next(it)
1
>>> next(it)
3
>>> next(it)
5
반응형
'program tip' 카테고리의 다른 글
여러 진입 점을 갖도록 Spring Security 3.x 구성 (0) | 2020.11.22 |
---|---|
콜백 기반 비동기 메서드를 대기 가능한 작업으로 변환하는 가장 좋은 방법 (0) | 2020.11.22 |
문자열을 변수와 어떻게 연결합니까? (0) | 2020.11.21 |
테이블에 열을 추가 한 다음 트랜잭션 내에서 업데이트합니다. (0) | 2020.11.21 |
빈 목록 끝에 추가하는 방법은 무엇입니까? (0) | 2020.11.21 |