파이썬의 for 문은 데이터의 컬랙션을 순차적으로 처리하기 위해서 사용되는 구문입니다.
While 반복문과 비슷한 기능을 가지고 있지만 대부분의 경우에 while 반복문 보다 더 편리하게 사용되는 반복문입니다.
모든 시퀀스 타입의 오브젝트는 for 문에서 사용할 수 있습니다.
For 문에서 사용 가능한 오브젝트인지 아닌지는 iter 함수를 사용하여 확인 할 수 있습니다.
For문에서 사용할 수 있는 스퀀스 타입의 오브젝트로는 문자열, 리스트, 딕셔너리, 튜플, 세트, range 오브젝트가 있습니다.
For 문에서 사용 가능한 시퀀스 타입 오브젝트
String
List
Dictionary
Tuple
Set
Range
For 문에서 사용할 수 없는 오브젝트로는 시퀀스 타입이 아닌, integer, float, boolean, None, function 오브젝트 등이 있습니다.
For 문에서 사용할 수 없는 오브젝트
Integer
Float
Boolean
None
Function
앞에서 iter 함수를 사용하여 for문에서 사용할 수 있는 오브젝트인지 아닌지를 구분할 수 있다고 설명 드렸습니다. 어떤 오브젝트를 iter 함수의 인수로 전달하여 실행하였을때 iterator 오브젝트가 리턴되면 for문에서 사용할 수 있는 오브젝트이고, 타입 에러가 발생하면 for 문에서 사용할 수 없는 오브젝트입니다.
For 문에서 사용할 수 있는 오브젝트를 iter 함수를 사용하여 확인해 보겠습니다.
String: <str_iterator object at 0x000001F326934BB0>
List: <list_iterator object at 0x000001F3247614F0>
Dictionary: <dict_keyiterator object at 0x000001F3274E0860>
Set: <set_iterator object at 0x000001F3274EFC00>
Range: <range_iterator object at 0x000001F326908D10>
For 문에서 사용할 수 있는 오브젝트를 iter 함수에 인수로 전달하니 모두 iterator 오브젝트를 리턴하는 것을 보았습니다.
다음은 for 문에서 사용할 수 없는 오브젝트를 확인해 보겠습니다.
For 문에서 사용할 수 없는 오브젝트도 확인해 보겠습니다.
For 문에서 사용할 수 없는 오브젝트를 iter 함수에 인수로 전달하니 모두 iterable 오브젝트가 아니라는 타입에러를 발생 시켰습니다. Float, boolean, None, function 오브젝트도 직접 확인해보시기 바랍니다.
Iterable 오브젝트인 문자열을 for 문에서 실행해보겠습니다.
For 문이 실행되면서 letter 라는 변수에 문자열이 하나씩 저장되는 것을 알 수 있습니다.
For 문은 내부적으로 어떻게 작동하는 걸까요? For 문이 어떻게 작동하는지를 이해하기 위해서는 먼저 iter 함수와 next 함수를 이해하셔야 합니다.
문자열을 iter 함수에 전달하여 str_Iterator 오브젝트를 만들고, str_iterator가 가지고 있는 next 함수를 사용하여 문자열을 하나씩 출력해보겠습니다.
a, b, c가 순차적으로 출력되다가 더 이상 출력할 문자열이 없으니 StopIteration 에러가 발생하는 것을 볼 수 있습니다. Iter 함수는 시퀀스 오브젝트를 인수로 받아 iterator 오브젝트를 리턴합니다. 이렇게 만들어진 iterator 오브젝트는 next 메소드를 가지고 있고, 이 next 메소드를 실행하면 문자열을 하나씩 순서대로 리턴합니다. 그리고 더이상 리턴할 문자열이 남아있지 않으면 StopIteration 에러를 발생시킵니다.
For 문 안에는 continue, break 2개의 키워드를 사용할 수 있습니다. Continue는 원하는 시퀀스를 건너뛰라는 명령어이고, break는 for 문을 종료하라는 명령어 입니다. 하나씩 사용해 보겠습니다.
하지만 for문안에 변수를 2개 정의하면 리스트 아이템이 각 변수에 하나씩 저장되게 됩니다. 이것을 언패킹이라고 합니다.
물론 아래의 코드와 같이 중첩 for 문을 사용해서 각 아이템에 접근할 수도 있지만, 아이템이 많지 않다면 언패킹을 사용하는 것이 더 편리합니다.
언패킹은 다음과 같이 아이템이 2개 이상이어도 사용할 수 있습니다.
하지만 아래와 같이 언패킹할 아이템의 숫자와 변수의 숫자가 일치하지 않으면 에러가 발생하게 됩니다.
이번에는 딕셔너리를 for문에서 사용하는 방법을 알아보겠습니다. 간단한 딕셔너리를 정의한 후 for 문 안에서 실행해보겠습니다. 어떤 값이 출력될까요?
딕셔너리를 for문에서 실행하면 각 아이템의 value가 아닌 key가 리턴됩니다. 그래서 딕셔너리를 for 문에서 사용하시려면 다음과 같이 리턴된 key를 사용하여 value에 엑세스하셔야 합니다.
다른 방법으로는 items 메소드를 사용하실 수 가 있습니다.
Items 메소드를 사용하시면 튜플 오브젝트로 key와 value를 리턴합니다. 이 경우에 언패킹을 사용하시면 됩니다.
세트 또한 for 문에서 사용할 수 있습니다. 하지만 세트는 순서가 없는 오브젝트이기 때문에 for문에서도 저장된 순서와 상관없이 리턴된다는 점 꼭 기억하시기 바랍니다. 실행해 보겠습니다.
마지막으로 range 오브젝트를 사용해보겠습니다.
Range 함수는 특정 숫자 만큼 for 문을 실행하고자 할 때 많이 사용됩니다. 예를 들어, 1 부터 10까지의 숫자를 출력하고 싶다면 다음과 같은 코드를 실행하시면 됩니다.
코딩 시험 문제로 반복문을 사용하여 구구단을 만들라는 문제가 아주 잘 나옵니다. For 문과 range 함수를 사용하여 구구단을 출력해보겠습니다.