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

파이썬 for 루프 실행 중 range 범위(상한)를 변경할 수 있을까?

결론부터 말하면: 불가능합니다

파이썬에서 range() 객체는 한 번 생성되면 그 내용을 수정할 수 없습니다. 즉, 루프가 실행되는 도중에 상한값(higher_limit)이나 하한값(lower_limit), 스텝(step_size)을 변경해도 이미 만들어진 range 객체에는 아무런 영향을 주지 못합니다.

예를 들어 다음과 같은 코드가 있다고 가정해 보겠습니다:

for i in range(lower_limit, higher_limit, step_size):
    # some code
    if i == 10:
        higher_limit = higher_limit + 5

위 코드에서 higher_limit 값을 변경하더라도, range()는 루프 시작 시점에 이미 고정된 값으로 생성되었기 때문에 반복 횟수에는 변화가 없습니다.

대안: while 루프 사용하기

실행 중에 반복 범위를 동적으로 조절해야 한다면, while 루프로 전환하는 것이 가장 간단하고 확실한 방법입니다. while 루프는 매 반복마다 조건식을 다시 평가하기 때문에, 변수 값을 변경하면 실제로 반복 횟수에 반영됩니다.

앞서 본 예제를 while 루프로 바꾸면 다음과 같습니다:

i = lower_limit
while i < higher_limit:
    # some code
    if i == 10:
        higher_limit = higher_limit + 5
    i += step_size

이렇게 작성하면 i가 10일 때 higher_limit가 5만큼 늘어나고, 이후 조건 검사에서 변경된 값이 적용되어 루프가 더 많이 반복됩니다.

추가 팁: 제너레이터 활용하기

좀 더 파이썬다운 방식을 원한다면 제너레이터(generator)를 사용할 수도 있습니다. 제너레이터는 값을 하나씩 생성하므로, 내부 로직에 따라 반복 범위를 유연하게 제어할 수 있습니다:

def dynamic_range(lower, upper, step):
    i = lower
    while i < upper:
        yield i
        i += step

for i in dynamic_range(0, 10, 1):
    # some code
    pass

정리

  • range() 객체는 불변(immutable)이므로 생성 후 수정이 불가능합니다.
  • 실행 중 범위를 변경해야 한다면 while 루프를 사용하세요.
  • 더 유연한 구조가 필요하다면 제너레이터도 좋은 선택입니다.