for i in iterable:
do_somthing(i)
위 작업은
iterator = iter(iterable)
while True:
try:
item = iterator.next()
except StopIteration:
break
do_something(item)
위와 동일함
in 뒤에는 iterable한 객체가 와야함
그러면 iterable에서 iterator를 뽑아내고
그 무한 루프 안에서 iterator에 next를 실행해 아이템을 뽑아내 for 바디 내의 작업을 함
그리고 iterator에서 StopIteration 예외가 raise 될 때, 즉 더이상 뽑아낼 값이 없을 때 무한 루프에서 빠져나옴
결국
for i in range(n):
mutate(n)
이런 식으로 n값을 변화시키려고 해봐야
loop가 돌기전에 이미 range(n)이 평가되어 iterable한 객체가 생성되고 땡이기 때문에
n의 이후 변화는 아무 의미가 없다
그리고 for-in이 돌아가는 방법 몰라도 상식적으로 range 함수를 매번 호출하지는 않을 거 아니냐
매번 호출하면 무슨 수로 i 값이 변화하겠어
이것만 생각해도 뒤에 n 바꾸는게 무의미하다는 것 정도는 당연하게 받아들여져야지
for in이랑 foreach랑 같음? - dc App
파이썬에는 foreach가 없지만 비슷하다
오해가 있을까봐 추가하면 for-in 구문 아니더라도 f(n)이 여러번 호출되어 평가될 방법은 없음 call_repeatedly(f, n) 이런 식으로 따로 해줘야겠지