목차

  1. 함수를 왜 쓰나?
  2. 함수 문법
  3. 연습문제
  4. 마치며

함수에 대한 개념과 문법을 알아봅시다.
자세한 내용은 04-1 함수 - 점프 투 파이썬을 참고하도록 합시다.

함수를 왜 쓰나?

지난 강의를 생각해보며 반복문을 이용해 구구단 2단을 출력해봅시다.

1
2
3
for x in range(1, 10):
value = 2 * x
print('2 x ' + str(x) + ' = ' + str(value))

프로그램의 요구사항이 늘었습니다. 2단 뒤에 3단을 출력해봅시다.

1
2
3
4
5
6
7
for x in range(1, 10):
value = 2 * x
print('2 x ' + str(x) + ' = ' + str(value))

for x in range(1, 10):
value = 3 * x
print('3 x ' + str(x) + ' = ' + str(value))

프로그램의 요구사항이 더 늘었습니다. 2단 뒤에 3단 뒤에 … 30단까지을 출력해봅시다.

1
2
3
4
5
6
7
8
9
10
11
12
for x in range(1, 10):
value = 2 * x
print('2 x ' + str(x) + ' = ' + str(value))

for x in range(1, 10):
value = 3 * x
print('3 x ' + str(x) + ' = ' + str(value))

# ...
for x in range(1, 10):
value = 30 * x
print('30 x ' + str(x) + ' = ' + str(value))

위 프로그램은 뭐가 문제가 있을까요? 똑같은 기능의 코드를 여러번 복붙한다는 문제가 있습니다.
만약 print() 안에 들어가는 글자들의 포맷을 바꾸고 싶다면? 30부분의 코드를 전부 수정해야 합니다.
게다가 로직이 30개중 한개라도 틀린다면? 프로그램상 버그라고 볼 수 있습니다.
따라서 이 기능을 수행하는 코드 블록을 묶어두고, 그걸 잘 이용하는 구조로 만들면 더 수월하겠죠?
이 때 사용하는 기능이 바로 함수입니다.

함수 문법

함수는 아래처럼 만듭니다.

1
2
3
4
5
6
7
8
9
# 함수에서 받을 인수를 명시함
def multiple(dan):
for x in range(1, 10):
value = dan * x
print(str(dan) + ' x ' + str(x) + ' = ' + str(value))

# 호출은 아래처럼 함수명 + 괄호 + 괄호안에 넘길 인수
multiple(2) # 2단 출력
multiple(3) # 3단 출력

만약 함수가 특정한 값을 리턴한다면 아래처럼 return 키워드를 이용합니다.

1
2
3
4
5
6
7
8
9
def multiple(dan):
results = []
for x in range(1, 10):
value = dan * x
results.append(value)
return results;

list1 = multiple(2) # 2단의 결과값이 있는 리스트
list2 = multiple(3) # 3단의 결과값이 있는 리스트

기본 개념은 위와 같습니다. 아래는 좀 더 편하게 쓰기위한 방법들입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 인수를 지정해서 넘기기
def add(a, b):
return a+b

add(1, 2) # 기본 호출 방법, 함수 정의와 인수 순서를 맞춰야 한다.
add(b=2, a=1) # 인수를 지정해서 넘길 수 있다.

##################

# 넘길 인수의 개수가 가변적일 때, *를 인수앞에 붙인다.
def add_many(*args):
result = 0
for i in args:
result = result + i
return result

# 호출은 아래처럼, 개수가 정해지지 않은 인자를 넘길 수 있다.
result = add_many(1,2,3)
result = add_many(1,2,3,4,5,6,7,8,9,10)

##################

# 인수의 기본값 정하기, 맨 뒤 인자일 경우 생략 가능
def add(a, b=2):
return a+b

result = add(1) # 인수로 1, 2가 들어간다. (2는 위에서 정한 인수 기본값)
result = add(1, 3) # 인수로 1, 3이 들어간다. (인수 기본값을 무시)

함수 내에서 사용하는 변수의 효력 범위에 대해 생각해봅시다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a = 1
def vartest(a):
a = a + 1

vartest(a)
print(a) # 과연 a의 결과는?

##################

# 아래는 어떨까요?
def vartest(a):
a = a + 1

vartest(3)
print(a)

간단한 함수인 경우 길게 표현하기 귀찮으므로 한줄로 표현할 수 있습니다. 이를 람다(lambda)라고 합니다.

1
2
3
4
5
6
7
8
9
10
11
# lambda 매개변수1, 매개변수2, ... : 매개변수를 이용한 표현식
add = lambda a, b: a+b
result = add(3, 4)
print(result)

# 위는 아래와 완벽히 동일합니다.
def add(a, b):
return a+b

result = add(3, 4)
print(result)

연습문제

  • 두 수를 인수로 받아 큰 수를 리턴하는 함수 만들기
  • 문자열을 인수로 받아 거꾸로 리턴하는 함수 만들기, 예) ‘Hello World’ → ‘dlroW olleH’
  • 반복문을 이용하여 아래처럼 * 피라미드를 만들되, 인수로 ‘줄번호’를 받는 함수 만들기

    • 1번 문제, ‘tryangle1(4)’ 처럼 호출

      1
      2
      3
      4
      *
      * *
      * * *
      * * * *
    • 2번 문제, ‘tryangle2(3)’ 처럼 호출

      1
      2
      3
            *
      * *
      * * *
    • 3번 문제, ‘tryangle3(5)’ 처럼 호출

      1
      2
      3
      4
      5
      * * * * *
      * * * *
      * * *
      * *
      *
    • 4번 문제, ‘tryangle4(4)’ 처럼 호출

      1
      2
      3
      4
      * * * *
      * * *
      * *
      *
  • 총 학생의 시험 점수가 아래와 같을때 아래의 함수 만들기

    1
    2
    3
    4
    5
    6
    7
    scores = [
    {'name':'mingus', 'score':100},
    {'name':'nicole', 'score':90},
    {'name':'sia', 'score':25},
    {'name':'irene', 'score':45},
    {'name':'maia', 'score':80}
    ]
    • 총점 구하는 함수
    • 평균 구하는 함수
    • 최고득점자 찾는 함수
    • 최저득점자 찾는 함수

마치며

여러분은 함수를 마스터 하셨습니다.