학습 목표
- 함수의 개념에 대해 설명할 수 있음
- 반환 값이 없는 함수와 반환 값이 있는 함수의 차이점을 설명할 수 있음
- 변수가 참조 될 수 있는 영역을 파악할 수 있음
주요 용어
- 동시 할당
- 복수 개의 변수에 값을 동시에 할당하는 명령
- 스코프
- 프로그램에서 변수가 참조될 수 있는 영역
- 기본 매개 변수
- 함수 호출 시 매개 변수가 전달되지 않을 경우 기본 값이 전달되는 매개 변수
- 가변 매개 변수
- 함수 호출 시 매개 변수를 사용자가 원하는 개수 만큼 지정할 수 있는 매개 변수
강의록
함수의 이해
원뿔 계산 프로그램 개선
원뿔 계산을 불규칙적으로 다른 환경에서 요청하는 상황이면?
1 2 3 4 5 6 7 8 9
#반지름 rad = 10, 높이 hei = 20 #반지름 radius = 20, 높이 height = 30 #반지름 r = 5, h = 50 vol = 1/3 * 3.14 * r ** 2 * h suf = 3.14 * r ** 2 + 3.14 * r * h print("원뿔의 부피는", vol, "입니다.") print("원뿔의 겉넓이는", suf, "입니다")
- 반지름과 높이가 무조건 10으로 한정 되어 있는 좋지 않은 함수
- 다른 반지름과 높이를 적용하려면 r, h를 수정해야 함
1 2 3 4 5 6 7 8
#반지름 rad = 10, 높이 hei = 20 prt_cone_vol(rad, hei) #반지름 radius = 20, 높이 height = 30 prt_cone_vol(radius, height) #반지름 r = 5, h = 50 prt_cone_vol(r, h)
- 반지름과 높이가 무조건 10으로 한정 되어 있는 좋지 않은 함수
함수의 개념
- 특정 작업을 수행하는 명령문의 집합
- 특정 작업을 함수의 이름으로 대체
- 유사한 유형의 문제를 해결할 수 있도록 고려
- 사용자 정의 함수
- 내장 함수와 달리 사용자의 목적에 따라 정의된 함수
- 반환 값에 따른 함수의 종류
- 반환 값이 없는 함수
print
- 반환 값이 있는 함수
input
,format
,int
등
- 반환 값이 없는 함수
반환 값이 없는 함수 정의
구문 형식
- 함수 이름은 식별자
- 매개 변수 리스트는 0개 이상의 값을 함수 내부로 전달
- 함수 내부에서 매개 변수 리스트는 변수와 동일하게 사용
원뿔 계산 함수 정의
1
2
3
4
5
6
7
8
9
10
11
# 원뿔 계산 함수 정의
def prt_cone_vol():
r = 10
h = 10
if r > 0 and h > 0:
# r,h 모두 양수일 때
vol = 1 / 3 * 3.14 * r ** 2 * h
print("원뿔의 부피는", vol, "입니다.")
else:
# r, h가 음수일 때
print("반지름과 높이 값에 양수를 입력하세요")
1
2
3
4
5
6
7
8
9
# 원뿔 계산 함수 정의
def prt_cone_vol(r, h):
if r > 0 and h > 0:
# r, h 모두 양수일 때
vol= 1 / 3 * 3.14 * r ** 2 * h
print("원뿔의 부피는", vol, "입니다.")
else:
# r, h가 음수일 때
print("반지름과 높이 값에 양수를 입력하세요")
- 프로그램을 구성하는 하나의 코드 블럭이기 때문에 단독 실행 불가
- 함수 호출해야 사용 가능
함수의 호출과 실행 흐름
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 원뿔 계산 함수 정의
def prt_cone_vol(r, h):
if r > 0 and h > 0:
#r,h 모두 양수일 때
vol = 1/3 * 3.14 * r ** 2 * h
print("원뿔의 부피는", vol, "입니다.")
else :
#r, h가 음수일 때
print("반지름과 높이 값에 양수를 입력하세요")
#반지름 30, 높이 50
rad = 30
hei = 50
prt_cone_vol(rad, hei)
- 함수 호출
- 만들어진 함수를 별도로 사용할 수 있는 방법
숫자 역순 출력 프로그램
숫자를 입력 받고 역순으로 출력하는 함수를 사용한 프로그램을 작성하시오.
1 2
역순으로 출력할 숫자를 입력하세요: 4567 7654
1 2 3 4 5 6 7 8 9
digits = 1234 def reverse_number(num): while num != 0: digit = num % 10 num = num // 10 print(digit, end="") # 개행 문자 대신 한 줄에 이어서 출력 reverse_number(digits)
반환 값이 있는 함수
원뿔 계산 프로그램 개선
원뿔 계산 결과 출력 결과 형식을 상황에 따라 변경하고 싶다면?
1 2 3 4 5 6 7 8 9
# 원뿔 계산 함수 정의 def prt_cone_vol(r, h) if r > 0 and h > 0 : # r, h 모두 양수일 때 vol = 1 / 3 * 3.14 * r ** 2 * h print("원뿔의 부피는" , vol, "입니다.") else : # r, h가 음수일 때 print("반지름과 높이 값에 양수를 입력하세요")
1 2 3 4 5 6 7 8 9
# 원뿔 계산 함수 정의 def prt_cone_vol(r, h): if r > 0 and h > 0 : # r, h 모두 양수일 때 vol = 1 / 3 * 3.14 * r ** 2 * h return vol else: # r, h가 음수일 때 print("반지름과 높이 값에 양수를 입력하세요")
반환 값이 있는 함수 정의
구문 형식
실행 후 결과 값을 남기는 함수
- return 명령어와 반환 값을 열거
- 함수 내부에 여러 개의 return 사용 가능
format 함수
- 실수 데이터 형식화
- 형식 지정자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def rtn_cone_vol(r, h): # 원뿔의 부피를 출력해주는 함수 정의
if r > 0 and h > 0 :
# r, h 모두 양수일 때
vol = 1/3 * 3.14 * r ** 2 * h
return vol
else:
# r, h가 음수일 때
print("반지름과 높이 값에 양수를 입력하세요")
# 원뿔 부피 계산 함수 호출
rtn_cone_vol(10, 20)
print(rtn_cone_vol(10, 20), "입니다")
print(format(rtn_cone_vol(10, 20), ">20.3f"), "입니다")
print(format(rtn_cone_vol(10, 20), "<20.3f"), "입니다")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 원뿔 계산 함수 정의
def prt_cone_vol(r, h) :
if r > 0 and h > 0 :
# r, h 모두 양수일 때
vol = 1/3 * 3.14 * r ** 2 * h
r, h = 0, 0
return vol
else :
# r, h가 음수일 때
print("반지름과 높이 값에 양수를 입력하세요")
#반지름 10, 높이 50
rad = 10
hei = 50
print(format( prt_cone_vol(rad, hei) , ">10.3f"))
print(rad, hei)
원뿔 계산 프로그램 개선
부피와 겉넓이를 모두 반환하려면?
1 2 3 4 5 6 7 8 9
# 원뿔 계산 함수 정의 def prt_cone_vol(r, h) if r > 0 and h > 0: # r, h 모두 양수일 때 vol = 1/3 * 3.14 * r ** 2 * h return vol else: # r, h가 음수일 때 print("반지름과 높이 값에 양수를 입력하세요")
1 2 3 4 5 6 7 8 9 10 11 12 13 14
def rtn_cone_vol_surf(r, h): # 원뿔의 부피를 출력해주는 함수 정의 if r > 0 and h > 0 : # r, h 모두 양수일 때 vol = 1/3 * 3.14 * r ** 2 * hei surf = 3.14 * r ** 2 + 3.14 * r * h return vol, surf # vol과 surf 동시 리턴 else: # r, h가 음수일 때 print("반지름과 높이 값에 양수를 입력하세요") print(rtn_cone_vol_surf(50, 100)) vol1, surf1 = rtn_cone_vol_surf(50, 100) print(vol1, "입니다.") print(surf1, "입니다.")
동시 할당의 개념
- 복수 개의 변수에 값을 동시에 할당
변수의 개수에 상응하는 값을 콤마(,)로 나열
1 2
temp = 27 season = "summer"
1
temp, season = 27, "summer"
교환(swap)
복수 개의 변수에 할당하는 값을 맞바꿈
1 2 3
temp = hei hei = rad rad = temp
1
rad, hei = hei, rad
정렬 프로그램
세 개의 사용자 입력을 오름차순으로 정렬하는 함수를 이용하여 정렬된 값을 출력하는 프로그램을 작성하시오.
1 2 3 4
첫번째 숫자를 입력하세요: 59 두번째 숫자를 입력하세요: 1 세번째 숫자를 입력하세요: 103 정렬된 숫자는 1, 59, 103 입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
a = int(input("첫번째 숫자를 입력하세요: ")) b = int(input("두번째 숫자를 입력하세요: ")) c = int(input("세번째 숫자를 입력하세요: ")) def sort3(a, b, c): if a > b: a, b = b, a if a > c: a, c = c, a if b > c: b, c = c, b print(a, b, c) sort3(a, b, c) print("출력 이후" , a, b, c) # 함수 내부에는 값만 전달되므로, 변수에는 영향이 가지 않음
함수의 확장
반환 값이 있는 함수의 호출
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 원뿔 계산 함수 정의
def prt_cone_vol(r, h) :
if r > 0 and h > 0 :
# r, h 모두 양수일 때
vol = 1/3 * 3.14 * r ** 2 * h
return vol
else :
# r, h가 음수일 때
print("반지름과 높이 값에 양수를 입력하세요")
#반지름 10, 높이 50
rad = 10
hei = 50
format(prt_cone_vol(rad, hei) , ">10.3f")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 원뿔 계산 함수 정의
def prt_cone_vol(r, h) :
if r > 0 and h > 0 :
# r, h 모두 양수일 때
vol = 1/3 * 3.14 * r ** 2 * h
r, h = 0, 0
return vol
else :
# r, h가 음수일 때
print("반지름과 높이 값에 양수를 입력하세요")
#반지름 10, 높이 50
rad = 10
hei = 50
print(format(prt_cone_vol(rad, hei) , ">10.3f"))
print(rad, hei)
값의 전달
함수가 호출될 때, 값이 매개 변수에 전달
1 2 3 4 5 6 7 8 9
x = 1 print("x의 값은", x) inc(x) # inc 함수 정의 전이기 때문에 오류 발생 def inc(x): x = x + 1 print("x의 값은", x) print("x의 값은", x)
- 값에 의한 전달이므로 함수 내부에서 계산된 값이 함수 외부에는 반영 되지 않음
- 변수가 전달 되는 것이 아니라 값이 전달됨
변수의 스코프
프로그램에서 변수가 참조될 수 있는 영역
1 2 3 4 5 6 7 8 9
x = 1 print("x의 값은", x) def inc(x): x = x + 1 print("x의 값은", x) inc(x) print("x의 값은", x)
- 전역 변수
- 프로그램 전체 영역에서 접근
- 지역 변수
- 선언된 함수 내부에서만 접근
- y 호출 부분에 오류 발생
- 전역 변수
함수 내부에서의 변수와 함수 외부에서의 변수는 다름
1 2 3 4 5 6 7 8 9 10 11 12 13 14
def rtn_cone_vol(r, h): # 원뿔의 부피를 출력해주는 함수 정의 if r > 0 and h > 0 : # r, h 모두 양수일 때 vol = 1/3 * 3.14 * r ** 2 * hei r, h = 0, 0 # 0으로 초기화 return vol else: # r, h가 음수일 때 print("반지름과 높이 값에 양수를 입력하세요") radius = 50 height = 100 print(format(rtn_cone_vol(radius, height), ">10.3f")) print("함수 사용 후 ", radius, height)
원뿔 계산 프로그램 개선
단위 원뿔(반지름 20, 높이 30)의 부피와 겉넓이를 출력하려면?
1 2 3 4 5 6 7 8 9 10
# 원뿔 계산 함수 정의 def prt_cone_vol_surf(r, h) : if r > 0 and h > 0 : # r, h 모두 양수일 때 vol = 1/3 * 3.14 * r ** 2 * h suf = 3.14 * r ** 2 + 3.14 * r * h return vol, surf else : # r, h가 음수일 때 print("반지름과 높이 값에 양수를 입력하세요")
기본 매개 변수
함수 호출 시 매개 변수가 전달되지 않을 경우 기본 값이 전달되는 매개 변수
1
print("Hello", "I am Python")
1
print("Hello", "I am Python", sep = " ")
기본 매개 변수의 정의
구문 형식
- 일반 매개 변수 앞에 위치할 수 없음
매개 변수를 입력하지 않으면 기본 값이 적용되는 프로그램
1 2 3 4 5 6 7 8 9 10 11 12
def rtn_cone_vol_surf(r = 20, h = 30): # 함수 정의 부분에 기본 값 지정 if r > 0 and h > 0 : # r, h 모두 양수일 때 vol = 1/3 * 3.14 * r ** 2 * hei surf = 3.14 * r ** 2 + 3.14 * r * h return vol, surf # vol과 surf 동시 리턴 else: # r, h가 음수일 때 print("반지름과 높이 값에 양수를 입력하세요") print(rtn_cone_vol_surf(100, 200)) print(rtn_cone_vol_surf())
원뿔 계산 프로그램 개선
반지름은 10이고 높이가 1, 5, 14, 26, 31인 원뿔의 부피와 겉넓이를 각각 출력하시오.
1 2 3 4 5 6 7
반지름 10 , 높이 1 원뿔 부피: 104.66666666666666 높이: 345.4 반지름 10 , 높이 5 원뿔 부피: 523.3333333333333 높이: 471.0 반지름 10 , 높이 31 원뿔 부피: 3244.6666666666665 높이: 1287.4
- 함수를 이용해서 만들되, 리스트를 만든 것과 같은 효과가 나는 프로그램
가변 매개 변수
함수 호출 시 매개 변수를 사용자가 원하는 개수 만큼 지정할 수 있는 매개 변수
1 2 3 4 5
x = 10 y = 20 z = 30 print("x는", x, "y는", y, "z는", z)
- 변수의 개수가 한정되어 있지 않음
- 실제 전달 될 때 리스트 형태로 전달 됨
- for 문 사용
- 시퀀스 개념을 사용하여 하나의 할당 연산자만으로 여러 값들을 한번에 전달
가변 매개 변수의 정의
구문 형식
- 일반 매개 변수 앞에 위치할 수 없음
- 가변 매개 변수는 1개만 사용 가능
- 파라미터의 개수가 가변적인 형태의 함수
- 파라미터의 개수가 정해지지 않았다면 파라미터로 넘어오는 값들은 시퀀스 형태로 전달
- 반복이 사용 됨
1 2 3 4 5 6 7 8 9 10 11
def var_sum_avg(*numbers): sum = 0 count = 0 # 파라미터의 개수를 알아내기 위한 변수 for i in numbers: # 시퀀스 내에 있는 값들을 하나씩 가져오기 위해 for문 사용 sum = sum + i count = count + 1 # 평균을 구하기 위해 파라미터의 개수 구함 return sum, sum/count print(var_sum_avg(10, 20, 30 , 40)) print(var_sum_avg(20, 25, 10, 85, 100 , 150)) # 입력 값의 개수가 달라져도 정상 동작함
연습 문제
다음 중 반환 값에 따른 함수의 종류를 구분할 때, 나머지와 다른 하나는?
a.
print
- 반환 값에 따른 함수의 종류가 같은 것
input
format
int
- 반환 값에 따른 함수의 종류가 같은 것
다음 코드의 실행 결과는?
1 2 3
temp, season = 27, "summer" season, temp = temp, season print(season)
a. 27
다음 코드의 실행 결과는?
1 2 3 4 5 6 7
x = 1 def updatex(): x = 2 x = x + 1 updatex() print(x)
a. 1
학습 정리
- 함수란 특정 작업을 함수의 이름 만으로 수행하는 명령문의 집합을 말함
- 반환 값의 유무에 따라 반환 값이 없는 함수와 반환 값이 있는 함수로 구분 됨
- 반환 값이 없는 함수는 함수 실행 후 어떤 값도 남기지 않는 함수임
- 반환 값이 있는 함수는 함수 내부에서 return 명령어를 통해 값을 남김
- 동시 할당이란 복수 개의 변수에 값을 동시에 할당하는 연산임
- 이를 통해 단일 명령문으로 변수의 값을 맞바꿈이 가능함
- 값의 전달에 의한 호출이란 함수 호출 시 함수 내부에는 매개 변수의 값이 전달 됨
- 변수의 스코프는 프로그램에서 변수가 참조 될 수 있는 영역임
- 변수의 스코프에 따라 변수는 전역 변수와 지역 변수로 구분 됨
- 기본 매개 변수란 함수 호출 시 매개 변수가 전달되지 않을 경우 기본 값이 전달 되는 매개 변수를 말함
- 함수 호출 시 매개 변수를 사용자가 원하는 개수 만큼 지정할 수 있는 매개 변수를 가변 매개 변수라고 하며, 함수 정의 시 매개 변수 이름 앞에
*
를 사용함