>>> for c in 'word': print c
...
기호가 한 줄에 하나씩 인쇄되는 것에 주목하세요. 또 회돌이 몸체가 단 한 줄로 구성되어 있어서 같은 줄, 쌍점(:) 다음에 추가할 수 있는 것에도 주목하세요. 쌍점은 파이썬에게 다음에는 코드 블록이 온다고 알려줍니다.
터플을 회돌이 할 수도 있습니다:
>>> for word in ('one','word', 'after', 'another'): print word
...
이 번에는 한 줄에 단어 하나씩을 얻습니다. 물론 그 모두를 한 줄에 인쇄할 수도 있습니다. print 서술문 뒤에 쉼표를 하나 두면 파이썬이 새줄문자를 인쇄하지 못하도록 막기 때문에 다음 print 서술문은 바로 앞 서술문이 떠났던 그 곳에서 다시 시작합니다.
>>> for word in ('one', 'word', 'after', 'another'): print word,
...
이제는 단어들이 한 줄에 보입니까?
(range()는 리스트를 만들어 내므로) 이미 리스트에 적용되는 for 회돌이를 보았지만 완벽을 기하기 위하여 명시적으로 해 보겠습니다:
>>> for item in ['one', 2, 'three']: print item
...
이와 같이 foreach 스타일의 회돌이를 사용할 때 한 가지 약점이 있습니다. 회돌이는 집단에 있던 원소들이 담긴 사본을 돌려주기 때문에, 그 집단의 내용물을 직접 수정할 수는 없습니다. 그래서 집단을 수정할 필요가 있다면 다음과 같이 집단의 지표가 관련된 좀 어색한 해결책을 사용해야 합니다:
myList = [1,2,3,4]
for index in range(len(myList)):
myList[index] += 1
print myList
myList의 각 항목이 1씩 늘어납니다. 지표 트릭을 사용하지 않았다면 복사된 항목만 증가시킬 뿐이지 원래 리스트는 바뀌지 않았을 것입니다.
이 예제에서 처음으로 파이썬 상호대화 프롬프트(>>>)를 사용하지 않았습니다. 그래서 이것을 연속열 심화연구 주제에서 기술한 대로 파일에 타자해 넣을 필요가 있습니다. >>> 프롬프트에서 타자해 보려면 빈 줄을 더 추가해서 파이썬에게 블록이 끝났음을 알려주어야 합니다. 예를 들어 myList = 뒤에서 말입니다. 실제로 블록이 시작되고 멈추는 곳을 배우는 아주 좋은 방법입니다; 코드를 타자해 넣고 줄이 더 필요한 곳을 올바로 추측했는지 알아보세요. 바로 들여쓰기가 바뀌는 곳이 그곳입니다!
회돌이에 대하여 다른 함정은 반복 중인 집단 안에서 항목을 지우면 안된다는 것입니다. 그렇지 않으면 회돌이는 혼란을 일으킵니다. 마치 그 위에 올라서서 나무의 가지를 쳐내는 예전 만화 주인공처럼 말입니다! 이런 상황을 다루는 가장 좋은 방법은 다른 종류의 회돌이를 사용하는 것입니다. 이런 회돌이는 다음 섹션에서 연구해 보겠습니다. 그렇지만 원소를 안전하게 제거하는 법을 이해하려면 분기라는 또다른 주제를 다룰 때까지 기다릴 필요가 있습니다. 그래서 이 주제는 그 즈음에 다다르면 설명드리겠습니다.
Posted by 홍반장