파이썬 더 많은 제어 흐름 도구

파이썬 더 많은 제어 흐름 도구

while 말고도 파이썬은 프로그램의 흐름을 조절하는 여러 문장을 제공해요. 조건에 따라 실행을 갈라 주는 if, 순서를 따라 반복하는 for, 숫자 수열을 만들어 주는 range(), 반복을 끊거나 건너뛰는 break/continue까지. 이 장은 그 제어 흐름 도구들을 차례로 다뤄요.

출처: 4. More Control Flow Tools

if 문

가장 익숙한 문장이 if 문이에요. elif는 'else if'의 줄임이고, 과도한 들여쓰기를 피하는 데 도움을 줘요. elif는 여러 개 올 수 있고, else는 선택 사항이에요.

>>> x = int(input("Please enter an integer: "))
Please enter an integer: 42
>>> if x < 0:
...     x = 0
...     print('Negative changed to zero')
... elif x == 0:
...     print('Zero')
... elif x == 1:
...     print('Single')
... else:
...     print('More')
...
More

if ... elif ... elif ... 나열은 다른 언어의 switchcase 문을 대신해요. 같은 값을 여러 상수와 비교하거나 특정 타입·속성을 확인할 때는 match 문이 더 유용할 수 있어요.

for 문

파이썬의 for는 C나 Pascal과 조금 달라요. 산술 수열을 반복하는 대신, 어떤 시퀀스(리스트나 문자열)의 항목을 그 순서대로 반복해요.

>>> words = ['cat', 'window', 'defenestrate']
>>> for w in words:
...     print(w, len(w))
...
cat 3
window 6
defenestrate 12

반복하면서 같은 컬렉션을 수정하는 코드는 맞추기 까다로워요. 컬렉션의 복사본을 반복하거나 새 컬렉션을 만드는 게 더 간단해요.

users = {'Hans': 'active', 'Éléonore': 'inactive', '景太郎': 'active'}

# 전략 1: 복사본을 반복
for user, status in users.copy().items():
    if status == 'inactive':
        del users[user]

# 전략 2: 새 컬렉션 생성
active_users = {}
for user, status in users.items():
    if status == 'active':
        active_users[user] = status

range() 함수

숫자 수열을 반복해야 한다면 내장 함수 range()가 유용해요. 끝점은 생성된 수열에 포함되지 않아요. range(10)은 길이 10인 시퀀스의 유효한 인덱스 값 10개를 만들어요. 시작점을 다르게 하거나 증가폭(음수도 가능, 보통 'step'이라 불러요)을 지정할 수도 있어요.

>>> list(range(5, 10))
[5, 6, 7, 8, 9]

>>> list(range(0, 10, 3))
[0, 3, 6, 9]

>>> list(range(-10, -100, -30))
[-10, -40, -70]

range()가 반환하는 객체는 많은 점에서 리스트처럼 행동하지만 실제로는 리스트가 아니에요. 반복할 때 원하는 시퀀스의 항목을 차례로 돌려주되, 리스트를 실제로 만들지 않아서 공간을 절약해요. 이런 객체를 **이터러블(iterable)**이라고 불러요. sum(range(4))처럼 이터러블을 인자로 받는 함수에도 그대로 쓸 수 있어요.

break와 continue

break는 가장 안쪽의 forwhile 루프를 즉시 빠져나가요. continue는 루프의 다음 반복으로 넘어가요.

>>> for n in range(2, 10):
...     for x in range(2, n):
...         if n % x == 0:
...             print(f"{n} equals {x} * {n//x}")
...             break
...
4 equals 2 * 2
6 equals 2 * 3
8 equals 2 * 4
9 equals 3 * 3

파이썬 커뮤니티가 널리 따르는 스타일 가이드가 PEP 8이에요. 핵심만 추리면 이래요. 들여쓰기는 4칸 스페이스에 탭 금지, 줄은 79자를 넘기지 않기, 함수와 클래스 사이는 빈 줄로 구분, 연산자 주변과 콤마 뒤엔 공백, 클래스는 UpperCamelCase, 함수·메서드는 lowercase_with_underscores, 메서드의 첫 인자는 항상 self로 쓰기 등이에요. 가독성을 높이는 약속이라 가볍게 익혀 두면 좋아요.

더 알아보기