파이썬 더 많은 제어 흐름 도구
파이썬 더 많은 제어 흐름 도구
while 말고도 파이썬은 프로그램의 흐름을 조절하는 여러 문장을 제공해요. 조건에 따라 실행을 갈라 주는 if, 순서를 따라 반복하는 for, 숫자 수열을 만들어 주는 range(), 반복을 끊거나 건너뛰는 break/continue까지. 이 장은 그 제어 흐름 도구들을 차례로 다뤄요.
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 ... 나열은 다른 언어의 switch나 case 문을 대신해요. 같은 값을 여러 상수와 비교하거나 특정 타입·속성을 확인할 때는 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는 가장 안쪽의 for나 while 루프를 즉시 빠져나가요. 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로 쓰기 등이에요. 가독성을 높이는 약속이라 가볍게 익혀 두면 좋아요.