지난 여름 네이버 커넥트 재단에서 운영하는 부스트코스 코칭스터디에 선발되어 <모두를 위한 파이썬 PY4E 2022>를 참여하게 되었다. 현재는 코칭스터디 강좌는 종료되었지만 부스트코스 강좌는 무료로 계속 들을 수 있다. 그럼 그 코칭스터디와 부스트코스에서 배운 것들을 정리 해보고자 한다.
부스트 코스 강좌에서 제공한 강좌 중 모두를 위한 파이썬 강좌에 나와있는 함수와 반복문에 대해 정리한 내용이고 추가로 심화 과정인 재귀함수에 대해서도 다루어 보려고 한다.
추가적인 공부를 원하시면 해당 강좌를 통해 공부가 가능하다!
강좌링크 : https://www.boostcourse.org/cs122
강좌명 : 모두를 위한 파이썬(PY4E)
모두를 위한 파이썬 (PY4E)
부스트코스 무료 강의
www.boostcourse.org
함수
함수란?
프로그래밍에서 함수는 재사용 가능한 코드 묶음을 말한다. 함수를 통해 반복적인 코드를 한번의 구현으로 사용하여 조금 더 가독성이나 생산성에 측면에서의 장점이 있다.
함수 정의
함수는 함수 선언과 호출이 이루어 지는데 함수 선언시에는 함수명
, 매개변수
, 반환값
으로 이루어지고 함수 호출 시에는 함수명
, 인자
식으로 이루어 진다. 아래 코드를 보자
## 함수 선언 ##
def plus(a, b):
result = 0
result = a + b
return result
## 함수 호출 ##
sum = plus(10, 20)
print(sum)
## 출력 결과 ##
30
- 함수 선언
- 함수 선언부를 보면
def
라는 단어가 먼저 보일 것이다. 이는 함수를 호출할 때 사용하는 기호로def 함수명():
식으로 사용한다. 이후 나오는plus
는 함수명으로 임의로 지정한 단어이다. 보통 함수명은 변수명과 비슷하게 해당 함수가 구현하는 뜻을 포함하는 내용이면 좋고 동사로 짓고 첫글자는 소문자로 짓는 것이 표준방식이다. (a, b)
가 보일 것 인데a
와b
는 매개변수로 함수 호출시에 값을 전달하면 이를 전달받아 함수내에서 사용할 수 있게 하는 변수이다. 매개 변수는 해당 변수 내에서만 유효하고 함수 밖에서는 사용할 수 없다. 보통의 다른 언어들은 변수등을 할당할 때 형식을 정해 주어야 하는 반면에 파이썬은 형식을 적어주지 않아도 프로그램내에서 형식을 판단하기 때문에 작성시에 편리하다.return
기호는 값을 반환하는 것으로 함수 호출시 값을 반환해 주어 변수 등에 저장할 수 있다.
- 함수 선언부를 보면
- 함수 호출
- 함수 호출 시에는
함수명
,인자
를 전달한다. 이때 주의해야할 사항은 매개변수가 함수내에서 어떻게 쓰이는 지 파악하고 값을 잘 전달 하는 것이 중요하다. 순서대로10
은a
에20
은b
에 할당되어진다. - 함수 호출이 끝나면 반환값은
sum
변수에 저장되어 진다.
- 함수 호출 시에는
함수는 단순이 함수 정의만하면 아무일도 일어나지 않고 반드시 호출을 통해 사용해야 한다.
return 값을 설정하지 않으면 void 함수로 값을 반환하지 않는 함수이다. 보통 함수내 print()문을 통해 표현할 때 주로 사용한다.
다음으로 반복문에 대해서 알아보겠다.
반복문
반복문은 프로그램에 있어서 중요한것으로 반복문이 없으면 코드가 너무 길어져 프로그래밍을 하기 너무 힘들 것이다. 1부터 10000까지의 숫자를 출력하려면 총 10000개의 print()문을 구현해야하기 때문이다.
반복문이란?
말그대로 문장을 반복하는 것이다. 반복문에는 for문과 while문이 있다. 반복문은 범위를 지정해서 그 안의 범위만큼 일을 반복해 수행한다.
while문
변수 = 시작값
while 변수 < 끝값 :
일을 수행
변수 = 변수 + 증가값
위 방식대로 while문을 사용할 수 있다.
i = 0
while i < 3:
print(i)
i += 1
print(i)
결과는 0 1 2 3 순으로 출력 될 것이다. i가 0에서 3보다 작으므로 일을 수행 i가 1커짐 i가 여전히 3보다 작으므로 이후 다시 반복 후 i가 3이 되었을 때 3보다 작지 않으므로 반복문을 나와 i의 값을 출력 할 것이다. while문은 조건식으로 범위를 지정한다.
만약 반복문을 수행하던 중 반복문을 빠져 나오거나 지금 수행하고 있는 구간을 점프하려면 break
와 continue
를 사용할 수 있다.
i = 0
while True:
print(i)
if i > 2:
break
i += 1
print(i)
위 식은 비효율적이긴 하지만 설명을 하기 위해 적어 보았다. True
는 반복문을 계속해서 진행한다는 의미이다. 위 조건식을 이용해 i가 2보다 커지면 반복문을 탈출해 빠져 나올 수 있다. 처음에 보았던 while문과 같이 0부터 3까지의 수를 반환한다.continue
를 사용하면 해당 반복문이 현재 하고 있는 일을 점프한 뒤 다음 반복을 실행한다.
for문
for 변수 in range(시작값, 끝값+1, 증가값):
이 부분을 반복
range()함수는 지정된 범위의 값을 반환하는데 시작값에서 부터 변수에 값이 저장되어 반복을 수행하는 형태로 끝값에 도달할 때 까지 반복한다.
for i in range(0, 3):
print(i)
print(i)
위 식의 결과는 0 1 2 2 로 출력된다. 증가값을 설정해 주지 않으면 1씩 증가한다. 끝값(2)까지 증가한 후 반복문을 종료하여 print()문을 출력해 마지막 출력은 2가 출력 된다.
for문도 마찬가지로 break
와 continue
를 사용할 수 있다.
for문은 while문과 다르게 문자열이나 리스트 반복에 용이한데 그 이유는 in
이라는 기호를 사용해서이다.
for 변수 in 리스트 or 문자열:
반복
리스트와 문자열의 0번 인덱스부터 끝까지 변수에 할당하여 값을 표현 할 수 있다.
또한 반복문 안에는 반복문을 구현하여 이중 반복문을 구성할 수도 있다.
재귀 함수
재귀함수는 함수형 프로그래밍에서도 많이 쓰이는 것으로 간혹 반복문으로 구현하기 까다로운 것들이 재귀함수를 이용하면 쉽게 구현 할 수 있는 것이 있다.
재귀 함수란?
재귀 함수란 자기 자신을 호출 하는 함수를 말한다. 종료 조건이 충족될 때까지 반복적으로 스스로를 호출하면서 작업을 수행한다.
함수 구현
def 재귀함수 (매개변수):
작업수행
if 종료조건:
return 결과
else:
return 재귀함수(작업을 수행한 인자)
재귀함수를 이용한 방법으로는 팩토리얼과 하노이의 탑이 있다.
재귀함수는 이론 상 모두 반복문으로 구현 할 수 있다.
다음은 팩토리얼을 반복문으로 구현한 함수이다.
def factorial(n):
sum = 1
for i in range(1, n+1):
sum = sum * i
return sum
이 반복문으로 구현된 팩토리얼 함수를 재귀함수로 재구현 해 보겠다.
def factorial(n):
if n == 1:
return 1
return n * factorial(n-1)
위 함수를 표현해 보면 factorial(5)는 5 * factorial(4) factorial(4)는 4 * factorial(3)을 ... factorial(1)은 1을 반환하면 5 * 4 * 3 * 2 * 1이 되어 120을 반환한다.이렇게 되면 factorial 함수가 종료조건에 도달할 때까지 계속 stack이 쌓이게 된다. 파이썬의 경우 10^3 을 넘어 가면 recursion error가 이러 난다고 한다. 이를 방지하기 위한 꼬리 재귀 등 여러 방법이 나와있다.
관련 자료 : https://www.geeksforgeeks.org/python-handling-recursion-limit/
Python | Handling recursion limit - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
재귀함수는 코드가 간결하다는 장점이 있고 중첩반복문을 계속 사용해야하는 경우 재귀함수를 이용하면 편리한 경우가 많다.
하지만 재귀함수는 사용이 어렵고 메모리를 많이 잡아 먹는 단점이 있고 종료 조건을 확실이 정해 주어야 한다.
오늘은 함수와 반복문 재귀함수에 대해 알아 보았다. 재귀 함수는 자주 사용하지 않아 구현하기 까다롭지만 반복해 수행하면 익숙해 질 것이라 생각된다. 다음에는 문자열 파싱에 대해 더 다루어 보겠다.
'[부스트코스 코칭스터디]' 카테고리의 다른 글
[부스트코스] 모두를 위한 파이썬(PY4E) 파이썬 그리고 새로운 시작 (0) | 2022.09.28 |
---|---|
[부스트코스] 모두를 위한 파이썬(PY4E) 딕셔너리, 튜플, 셋 (2) | 2022.09.25 |
[부스트코스] 모두를 위한 파이썬(PY4E) 컬렉션과 리스트 (0) | 2022.09.24 |
[부스트코스] 모두를 위한 파이썬(PY4E) 문자열과 문자열 파싱 (1) | 2022.09.21 |
[부스트코스] 모두를 위한 파이썬(PY4E) 변수와 자료형 (0) | 2022.09.02 |