Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 for 루프가 단일 객체에 대해 기본적으로 한 번 반복하지 않는 이유

파이썬은 '반복 가능(iterable)'하지 않은 객체를 순회할 수 없습니다. for 루프는 내부적으로 반복 가능한 데이터 타입에 내장된 특수 메서드들을 호출하면서, 그 객체로부터 요소를 하나씩 추출하는 방식으로 동작하기 때문입니다.

for 루프의 내부 동작 원리

파이썬에서 for 루프가 실행되면 다음과 같은 과정이 일어납니다.

  • 먼저 iter() 함수를 호출해 객체의 __iter__() 메서드를 통해 이터레이터(iterator)를 얻습니다.
  • 그다음 next() 함수를 반복적으로 호출하며 요소를 하나씩 꺼냅니다.
  • 더 이상 꺼낼 요소가 없어 StopIteration 예외가 발생하면 루프를 종료합니다.

즉, for 루프는 리스트, 튜플, 문자열, 딕셔너리처럼 이러한 프로토콜을 구현한 객체에만 작동합니다.

단일 객체가 반복되지 않는 이유

정수(int)나 실수(float) 같은 단일 값 객체는 __iter____next__ 메서드를 갖고 있지 않은 반복 불가능(non-iterable) 타입입니다. 따라서 이런 객체에서는 요소를 추출할 방법이 전혀 없으며, for 루프는 이를 하나짜리 시퀀스처럼 취급하지 않고 오히려 오류를 발생시킵니다.

x = 5
for i in x:
    print(i)
# TypeError: 'int' object is not iterable

단일 객체를 한 번 반복하고 싶다면?

만약 단일 객체를 정확히 한 번 순회하고 싶다면, 리스트나 튜플로 감싸서 반복 가능한 형태로 만들어 주면 됩니다.

x = 5
for i in [x]:
    print(i)  # 5가 한 번 출력됨

결론적으로, 파이썬의 for 루프는 반복 가능 프로토콜(iterable protocol)을 따르는 객체에만 적용되도록 설계되어 있기 때문에, 단일 객체에 대해 자동으로 한 번의 반복을 수행하지 않는 것입니다.