프로그래머를 준비하기 이전 학부에서 다뤘던 python에서 pass
, continue
, break
의 존재는 알았지만 당시에는 이 차이에 대해 잘 몰랐고, 그나마 while
과 함께 break
만 많이 사용했었다.
본격적으로 프로그래머를 준비하기 시작하면서 이 차이에 대해 자세하게 알게 되었는데 이번 포스팅에 대해서는 이 차이에 대해 짧게 써보려고 한다.
이 세 가지 차이에 대해 설명하기에 앞서 우선 loop
의 개념을 확인할 필요가 있다. loop
를 말할 때면 보통 떠올릴 수 있는 것이 무한루프이다. 이거는 끊임없이 반복된다는 소리인데 python
식으로 말하자면 break
없는
while True:
와 같다.. 본론으로 돌아와서 한마디로 loop
는 반복을 의미하는 단어이다. 그리고 python
에는 대표적인 2개의 반복문이 존재하는데 for
과 while
이다.
while
은 앞서 말했던 것 처럼 무한루프를 만들 수 있는 반복문으로 무한루프가 아니게 만들려면 간단히 True
대신 조건을 붙여주면 된다. 가령
while x != 1:
로 쓰면 x
가 1이 되기 전까지 계속해서 루프가 돈다는 의미가 된다.
for
은 iterator
(반복자)와 같이 쓰이는 반복문으로 보통 유한번 내로 끝나는 반복문이다. 가령
x = [1,2,3,4]
for i in x:
print(x)
'''
output :
1
2
3
4
'''
처럼 쓰인다. 하지만 이것도 무한반복으로 쓰일 수 있기는 한데 간단히 무한번 iterate 되는 iterator
를 in
뒤에 붙이면 되기 때문이다.
이에 대한 간단한 예시로는 itertools
모듈의 cycle 혹은 refeat
를 확인해보면 된다.
이제 본격적으로 위의 세 가지 pass
, continue
, break
의 차이를 알아보도록 하자.
pass
아마도 예전, 코딩컨벤션이 엄격했을 때 쓰지 않았을때 썼던 코드인 것 같은 pass
..
그 역할은 내가 사용했을 때는 단순히 loop
안에서, if
& else
문에서 if
보단 else
에 중요한 조건이 들어가있을 때 썼던 그런 받아주기 형식의 명령어이다.
가령 예를 들어 [0,3]x[0,3]
좌표평면 위에서 x,y
값이 둘 다 정수인 정점중 [1,2]x[1,2]
에 없는 점을 구하는 것을 생각해보자.
이 경우 if보다는 else를 쓰는 것이 효과적일 것이다.
for i in range(0,4):
for j in range(0,4):
if 1<=i<=2 and 1<=j<=2:
pass
else:
print(i,j)
(물론 요즘 난 pass 대신 1 하나 집어넣어준다...)
continue
반복문 안에서 반복을 한번 넘기는 명령어.
일반적으로 쓰이게 되는 서순은 다음과 같다.
for i in iterator:
x : 'loop가 돌 때 항상 실행되어야 하는 명령'
if 'loop를 끝내야 하는 조건':
continue
y : 'loop를 끝내야 하는 조건에 걸리지 않았을 때 실행되어야 하는 명령'
모든 프로그래밍 언어의 특성상 코드의 실행 순서는 위에서 아래로 향하게 된다. 그리고 continue
의 경우 처음 설명과 같이 반복을 한번 넘기는 명령어이다. 때문에 x
부분에는 loop
가 돌때마다 반드시 실행되야 하는 명령들(예를 들어 iterator
에 len
을 사용할 수 없을 때 전체 갯수를 카운트해야한다거나..)이 들어가야 하고, y
부분에는 loop
를 끝내야 하는 조건이 아닌 경우 실행되야 하는 명령들을 넣어주면 된다.
아래 예시는 위의 설명을 단적으로 보여주는 예시.
for i in range(5):
if i == 3:
continue
print(i)
'''
output :
0
1
2
4
'''
break
반복문 안에서 반복을 중지시키는 명령어. 가장 근접한 반복분의 반복만을 중지시킨다.
우선 간단한 예시로는
for i in range(5):
if i == 3:
if 1:
if 1:
break
print(i)
'''
output :
0
1
2
'''
말 그대로 가장 근접한 반복문을 중지시킨다(if
는 반복문이 아니기 때문에).
그리고 아직까지 좀 해깔릴 수가 있어서 이에 대한 이해를 돕기 위해 추가적인 코드도 작성해놓는다.
cnt = 0
while True:
for i in range(5):
print(i)
if i == cnt:
break
cnt += 1
if cnt == 4:
break
'''
output :
0 # for문 break
0
1 # for문 break
0
1
2 # for문 break
0
1
2
3 # for문 break & while문 break
'''
본격적으로 공부하기 이전 python
을 사용했을 때는 break
의 말 그대로의 뜻 때문에 exit()
과 정말 많이 혼동했었지만 exit()
은 그대로 python
의 run
을 종료하는 것이고, break
는 위에서 말했듯 반복을 즉시 한번(가장 가까운) 중지시키는 명령어이다.
마지막으로 이를 이용해서 소수를 구하는, 예쁜 코드 하나 넣고 마무리를 해본다.(방법에 따라 다르지만 웬만해선 에라토스테네스의 체를 이용해서 구하는것이 훨씬 효과적인 것이 함정이다.)
n = 100
Prime = [2]
for i in range(3,n+1):
for j in Prime:
if i%j == 0:
break
else:
Prime.append(i)
print(Prime)
'''
output :
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
'''