5회차: 함수(Function)
5회차: 함수(Function)
선수 학습: 4회차 (반복문)
학습 목표
- 함수(Function)의 개념과 필요성을 이해한다.
def(데프)로 함수를 정의하고 호출할 수 있다.- 매개변수(Parameter)와 반환값(Return Value)을 활용할 수 있다.
- 지역변수(Local Variable)와 전역변수(Global Variable)를 이해한다.
5.1. 함수란?
5.1.1. 함수의 개념
함수(Function)는 특정 작업을 수행하는 코드 묶음이다. 한 번 정의해두면 필요할 때마다 이름만 불러서 실행할 수 있다.
일상의 예를 들면, 세탁기를 생각할 수 있다. 세탁기의 “표준 세탁” 버튼을 누르면 물 넣기 → 세제 투입 → 세탁 → 헹굼 → 탈수까지 모든 과정이 자동으로 실행된다. 매번 모든 단계를 수동으로 할 필요가 없다. 파이썬의 함수도 마찬가지이다.
5.1.2. 함수가 없을 때의 문제점
친구 3명의 점수를 평균 계산하는 코드를 함수 없이 작성한다고 가정한다.
1# 홍길동 성적2s1 = 803s2 = 904s3 = 705avg = (s1 + s2 + s3) / 36print(f"홍길동 평균: {avg:.1f}")7
8# 김영희 성적9s1 = 9510s2 = 8511s3 = 7512avg = (s1 + s2 + s3) / 313print(f"김영희 평균: {avg:.1f}")14
15# 이철수 성적16s1 = 6017s2 = 7018s3 = 6519avg = (s1 + s2 + s3) / 320print(f"이철수 평균: {avg:.1f}")위 코드는 같은 계산 구조가 3번 반복된다. 만약 평균 계산 방식을 바꾸고 싶다면 3곳을 모두 수정해야 한다. 함수를 사용하면 이 문제를 해결할 수 있다.
5.2. 함수 정의와 호출
5.2.1. 함수 만들기 — def(데프)
def 키워드로 함수를 정의한다.
1def 함수이름():2 실행할 코드5.2.2. 함수 정의와 호출 예시
1def greet():2 print("안녕하세요!")3 print("파이썬 수업에 오신 것을 환영합니다.")4
5greet()6greet()7greet()| 줄 | 설명 |
|---|---|
| 1 | def 키워드 뒤에 함수 이름 greet 를 쓰고 괄호 () 와 콜론 : 으로 마친다. |
| 2~3 | 함수가 호출될 때 실행될 코드를 들여쓰기하여 작성한다. 이 부분을 함수 본문(Body) 이라 한다. |
| 5~7 | greet() 처럼 함수 이름 뒤에 () 를 붙이면 함수를 호출(Call) 한다. 3번 호출했으므로 함수 본문이 3번 실행된다. |
실행 결과
1안녕하세요!2파이썬 수업에 오신 것을 환영합니다.3안녕하세요!4파이썬 수업에 오신 것을 환영합니다.5안녕하세요!6파이썬 수업에 오신 것을 환영합니다.참고
함수는 정의만 해도 실행되지 않는다. 반드시 호출해야 실행된다. 함수를 정의하는 것은 레시피를 작성하는 것이고, 호출하는 것은 그 레시피대로 실제로 요리하는 것이다.
5.3. 매개변수(Parameter)와 인수(Argument)
5.3.1. 매개변수란?
함수를 호출할 때 외부에서 값을 전달받을 수 있다. 이 값을 받기 위해 함수 괄호 안에 선언하는 변수를 매개변수(Parameter) 라 한다.
1def greet(name):2 print(f"안녕하세요, {name}님!")3
4greet("홍길동")5greet("김영희")6greet("이철수")| 줄 | 설명 |
|---|---|
| 1 | 함수 괄호 안의 name 이 매개변수이다. 함수 안에서만 사용할 수 있는 변수이다. |
| 2 | 매개변수 name 을 f-string 안에서 사용한다. |
| 4 | "홍길동" 을 전달하여 호출한다. 함수 안에서 name = "홍길동" 이 된다. |
| 5 | "김영희" 를 전달하여 호출한다. name = "김영희" 가 된다. |
| 6 | "이철수" 를 전달하여 호출한다. name = "이철수" 가 된다. |
실행 결과
1안녕하세요, 홍길동님!2안녕하세요, 김영희님!3안녕하세요, 이철수님!호출할 때 전달하는 값 "홍길동", "김영희", "이철수" 를 인수(Argument) 라 한다.
5.3.2. 여러 개의 매개변수
매개변수는 쉼표(,)로 구분하여 여러 개를 사용할 수 있다.
1def intro(name, job, lv):2 print(f"이름: {name} | 직업: {job} | 레벨: {lv}")3
4intro("홍길동", "전사", 30)5intro("김영희", "마법사", 25)| 줄 | 설명 |
|---|---|
| 1 | 세 개의 매개변수를 쉼표로 구분하여 선언한다. |
| 4 | 세 인수를 순서대로 전달한다. name="홍길동", job="전사", lv=30 이 된다. |
실행 결과
1이름: 홍길동 | 직업: 전사 | 레벨: 302이름: 김영희 | 직업: 마법사 | 레벨: 255.4. 반환값(Return Value)
5.4.1. return이란?
return 키워드는 함수 실행 결과를 호출한 곳으로 돌려보낸다.
지금까지 함수 안에서 print() 로 출력만 했다. 하지만 계산 결과를 다른 변수에 저장하거나 다른 계산에 사용하려면 return 으로 값을 반환해야 한다.
5.4.2. return 기본 사용법
1def add(a, b):2 result = a + b3 return result4
5x = add(10, 20)6print(x)7print(add(5, 7))8print(add(3, 4) + add(1, 2))| 줄 | 설명 |
|---|---|
| 1 | 두 개의 매개변수 a, b 를 받는 함수를 정의한다. |
| 2 | a + b 의 결과를 result 에 저장한다. |
| 3 | return result 로 result 값을 호출한 곳으로 돌려보낸다. |
| 5 | add(10, 20) 은 30 을 반환한다. 이 값이 x 에 저장된다. |
| 6 | x 의 값 30 을 출력한다. |
| 7 | add(5, 7) 은 12 를 반환한다. 이 반환값이 바로 print() 에 전달된다. |
| 8 | add(3, 4) 는 7, add(1, 2) 는 3 을 반환한다. 7 + 3 = 10 을 출력한다. |
실행 결과
1302123105.4.3. print 와 return 의 차이
1def calc_print(a, b):2 print(a + b) # 화면에 출력만 한다. 값을 돌려주지 않는다.3
4def calc_return(a, b):5 return a + b # 계산 결과를 돌려준다.6
7result1 = calc_print(3, 4)8result2 = calc_return(3, 4)9
10print("calc_print 반환값:", result1)11print("calc_return 반환값:", result2)| 줄 | 설명 |
|---|---|
| 7 | calc_print(3, 4) 는 7 을 화면에 출력하지만, 아무것도 돌려주지 않는다. result1 에는 None 이 저장된다. |
| 8 | calc_return(3, 4) 는 7 을 result2 에 저장한다. |
실행 결과
172calc_print 반환값: None3calc_return 반환값: 7요약
계산 결과를 나중에 사용해야 한다면 return 을 사용한다. 단순히 출력만 하고 끝내려면 print 를 사용한다. 실무에서는 대부분 return 을 사용한다.
5.4.4. 여러 값 반환하기
return 뒤에 쉼표로 구분하면 여러 값을 한 번에 반환할 수 있다.
1def min_max(nums):2 return min(nums), max(nums)3
4scores = [85, 92, 78, 95, 60]5low, high = min_max(scores)6print(f"최저: {low}점, 최고: {high}점")| 줄 | 설명 |
|---|---|
| 2 | min(nums) 는 리스트에서 최솟값, max(nums) 는 최댓값을 반환하는 내장 함수이다. 두 값을 묶어서 반환한다. |
| 5 | 반환된 두 값을 low, high 두 변수에 나누어 저장한다. |
실행 결과
1최저: 60점, 최고: 95점5.5. 기본값(Default) 매개변수
5.5.1. 기본값이란?
매개변수에 기본값을 미리 지정할 수 있다. 함수를 호출할 때 해당 인수를 전달하지 않으면 기본값이 사용된다.
1def intro(name, job="모험가", lv=1):2 print(f"이름: {name} | 직업: {job} | 레벨: {lv}")3
4intro("홍길동")5intro("김영희", "마법사")6intro("이철수", "전사", 50)| 줄 | 설명 |
|---|---|
| 1 | job 의 기본값은 "모험가", lv 의 기본값은 1 이다. |
| 4 | name 만 전달했으므로 job="모험가", lv=1 이 사용된다. |
| 5 | name 과 job 을 전달했으므로 lv=1 기본값이 사용된다. |
| 6 | 세 값 모두 전달했으므로 기본값이 사용되지 않는다. |
실행 결과
1이름: 홍길동 | 직업: 모험가 | 레벨: 12이름: 김영희 | 직업: 마법사 | 레벨: 13이름: 이철수 | 직업: 전사 | 레벨: 50참고
기본값이 있는 매개변수는 반드시 기본값이 없는 매개변수보다 뒤에 위치해야 한다. def f(job="모험가", name): 처럼 쓰면 오류가 발생한다.
5.6. 지역변수(Local Variable)와 전역변수(Global Variable)
5.6.1. 지역변수
함수 안에서 만든 변수는 지역변수(Local Variable) 이다. 함수 안에서만 사용할 수 있으며 함수가 종료되면 사라진다.
1def calc():2 x = 100 # 지역변수3 print("함수 안:", x)4
5calc()6# print(x) # ← 오류! 함수 밖에서는 x를 사용할 수 없다.| 줄 | 설명 |
|---|---|
| 2 | x = 100 은 calc 함수 안에서 만들어진 지역변수이다. |
| 3 | 함수 안에서는 x 를 사용할 수 있다. |
| 6 | 주석 처리된 줄처럼 함수 밖에서 x 를 사용하면 NameError 오류가 발생한다. |
5.6.2. 전역변수
함수 밖에서 만든 변수는 전역변수(Global Variable) 이다. 코드 어디서든 사용할 수 있다.
1title = "파이썬 게임" # 전역변수2
3def show_title():4 print(title) # 함수 안에서 전역변수 사용 가능5
6show_title()7print(title) # 함수 밖에서도 사용 가능5.7. 종합 예제: 계산기 프로그램
1def add(a, b):2 return a + b3
4def sub(a, b):5 return a - b6
7def mul(a, b):8 return a * b9
10def div(a, b):11 if b == 0:12 return "0으로 나눌 수 없습니다."13 return a / b14
15def calc(a, b, op):16 if op == "+":17 return add(a, b)18 elif op == "-":19 return sub(a, b)20 elif op == "*":21 return mul(a, b)22 elif op == "/":23 return div(a, b)24 else:25 return "알 수 없는 연산자입니다."26
27a = float(input("첫 번째 숫자: "))28b = float(input("두 번째 숫자: "))29op = input("연산자 (+, -, *, /): ")30
31result = calc(a, b, op)32print(f"결과: {result}")| 줄 | 설명 |
|---|---|
| 1~2 | 더하기 함수. 두 수를 더한 결과를 반환한다. |
| 4~5 | 빼기 함수. 두 수를 뺀 결과를 반환한다. |
| 7~8 | 곱하기 함수. 두 수를 곱한 결과를 반환한다. |
| 10~12 | 나누기 함수. b 가 0이면 오류 문자열을 반환하고, 아니면 나눗셈 결과를 반환한다. |
| 14~23 | 연산자에 따라 알맞은 함수를 호출하여 결과를 반환하는 통합 계산 함수이다. |
| 25~27 | 사용자에게 두 숫자와 연산자를 입력받는다. |
| 29~30 | calc() 함수를 호출하여 결과를 출력한다. |
5.8. 실습 과제
과제 1. 섭씨-화씨 변환기
섭씨(℃)를 화씨(℉)로, 화씨를 섭씨로 변환하는 함수를 각각 만들고, 사용자에게 값을 입력받아 두 결과를 모두 출력한다.
- 섭씨 → 화씨 공식:
화씨 = 섭씨 × 9 / 5 + 32 - 화씨 → 섭씨 공식:
섭씨 = (화씨 - 32) × 5 / 9
1def to_f(c):2 return c * 9 / 5 + 323
4def to_c(f):5 return (f - 32) * 5 / 96
7temp = float(input("섭씨 온도를 입력하세요: "))8f = to_f(temp)9c_back = to_c(f)10
11print(f"섭씨 {temp:.1f}℃ → 화씨 {f:.1f}℉")12print(f"화씨 {f:.1f}℉ → 섭씨 {c_back:.1f}℃")과제 2. 평균 계산기 함수 개선
3개의 점수를 매개변수로 받아 평균을 반환하는 함수를 만들고, 함수를 3회 호출하여 각 학생의 평균을 출력한다.
1def avg3(s1, s2, s3):2 return (s1 + s2 + s3) / 33
4print(f"홍길동 평균: {avg3(80, 90, 70):.1f}")5print(f"김영희 평균: {avg3(95, 85, 75):.1f}")6print(f"이철수 평균: {avg3(60, 70, 65):.1f}")