치다:
>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2
따라서 예상대로 반복기의 진행은 동일한 객체를 변경하여 처리됩니다.
이것은 사실입니다.
a = iter(list(range(10)))
for i in a:
print(i)
next(a)
두 번째 요소마다 건너 뛰기 : next
반복자를 한 번 진행시켜야 하는 호출 , 루프에 의한 암시 적 호출은 두 번째로 진행해야 하며이 두 번째 호출의 결과는에 할당됩니다 i
.
그렇지 않습니다. 루프 는 목록의 모든 항목을 건너 뛰지 않고 인쇄 합니다.
내 첫 번째 생각은 루프 iter
가 전달 된 것을 호출하기 때문에 이것이 일어날 수 있고 이것이 독립적 인 반복자를 줄 수 있다는 것 iter(a) is a
입니다. 이것은 그렇지 않습니다 .
그렇다면 왜이 next
경우 반복자를 진행시키는 것처럼 보이지 않습니까?
답변
당신이 보는 것은 인터프리터 가 각 반복을 인쇄 next()
하는 i
것 외에도 반환 값을 에코 하는 것입니다.
>>> a = iter(list(range(10)))
>>> for i in a:
... print(i)
... next(a)
...
0
1
2
3
4
5
6
7
8
9
또한 인터프리터 인터프리터 등에서 0
출력되는 의 반환 값 print(i)
, 의 출력값도 마찬가지 입니다. 반복은 5 회 뿐이며, 각 반복마다 2 개의 라인이 터미널에 기록됩니다.1
next()
next()
사물 의 출력을 할당하면 예상대로 작동합니다.
>>> a = iter(list(range(10)))
>>> for i in a:
... print(i)
... _ = next(a)
...
0
2
4
6
8
또는 대화식 인터프리터 에코 와 출력 을 구별하기 위해 추가 정보를 인쇄 하십시오 print()
.
>>> a = iter(list(range(10)))
>>> for i in a:
... print('Printing: {}'.format(i))
... next(a)
...
Printing: 0
1
Printing: 2
3
Printing: 4
5
Printing: 6
7
Printing: 8
9
다시 말해, next()
예상대로 작동하지만 대화식 인터프리터에 의해 에코되는 반복자에서 다음 값을 리턴하기 때문에 루프에 자체 반복자 사본이 있다고 생각하게됩니다.
답변
무슨 일이 일어나고 있는지는 next(a)
a의 다음 값 을 반환하는데, 이는 영향을받지 않기 때문에 콘솔에 출력됩니다.
당신이 할 수있는 일은이 값을 가진 변수에 영향을 미칩니다.
>>> a = iter(list(range(10)))
>>> for i in a:
... print(i)
... b=next(a)
...
0
2
4
6
8
답변
기존 답변이 코드 예제에서 본질적으로 신비로운 것을 간접적으로 나타 내기 때문에 약간 혼란스러워 합니다. * “print i”및 “next (a)”모두 결과가 인쇄됩니다.
원래 시퀀스의 대체 요소를 인쇄하고 있으며 “next (a)”문이 인쇄되는 것은 예상치 못한 일이므로 “print i”문이 모든 값을 인쇄하는 것처럼 나타납니다.
그 점에서 변수에 “next (a)”의 결과를 할당하면 그 결과의 인쇄가 금지되어 “i”루프 변수의 대체 값만 인쇄된다는 것이 더 명확 해집니다. 이와 유사하게 “print”문을 작성하면 더 명확하게 명확하게 표현됩니다.
(기존 답변 중 하나는 블록으로 평가 된 예제 코드가 있으므로 인터프리터가 “next (a)”에 대한 중간 값을보고하지 않기 때문에 다른 답변을 반박합니다.)
일반적으로 질문에 대한 대답은 당신이 대답을 알고 나면 분명한 것에 대해 명백합니다. 어려울 수 있습니다. 당신이 그들을 이해하면 마찬가지로 비판 답변. 흥미 롭군…
답변
Python / 컴퓨터에 문제가 있습니다.
a = iter(list(range(10)))
for i in a:
print(i)
next(a)
>>>
0
2
4
6
8
예상대로 작동합니다.
Python 2.7 및 Python 3+에서 테스트되었습니다. 둘 다에서 제대로 작동
답변
여전히 이해하지 못하는 사람들을 위해.
>>> a = iter(list(range(10)))
>>> for i in a:
... print(i)
... next(a)
...
0 # print(i) printed this
1 # next(a) printed this
2 # print(i) printed this
3 # next(a) printed this
4 # print(i) printed this
5 # next(a) printed this
6 # print(i) printed this
7 # next(a) printed this
8 # print(i) printed this
9 # next(a) printed this
다른 사람들이 이미 말했듯이 next
예상대로 반복기를 1 씩 증가시킵니다. 반환 값을 변수에 할당해도 동작이 마술처럼 바뀌지 않습니다.
답변
함수로 호출되면 원하는 방식으로 작동합니다.
>>> def test():
... a = iter(list(range(10)))
... for i in a:
... print(i)
... next(a)
...
>>> test()
0
2
4
6
8