01
함수는 이름 붙인 작업 단위
def로 함수의 이름과 실행할 코드를 정의하고, 이름 뒤에 괄호를 붙여 호출합니다. 함수 본문은 호출될 때마다 실행되므로 같은 로직을 복사하지 않고 재사용할 수 있습니다.
일상에서 보면자주 쓰는 요리법에 이름을 붙여 필요할 때마다 같은 순서로 조리하는 것과 같습니다.
def say_hello():
print('안녕하세요')
say_hello()
say_hello()
한 줄씩 보기- say_hello라는 함수를 정의합니다.
- 들여쓴 본문이 함수의 작업입니다.
- 함수를 두 번 호출해 같은 작업을 두 번 실행합니다.
직접 값 바꾸기함수 안에 두 번째 print를 추가하고 호출 한 번당 몇 줄이 출력되는지 확인하세요.
흔한 실수함수를 정의하기만 하고 호출하지 않으면 본문은 실행되지 않습니다.
짧은 확인def 블록과 함수 호출 중 실제 작업을 시작하는 것은 어느 쪽일까요?
02
매개변수는 함수가 받을 입력
함수 정의의 매개변수는 호출할 때 전달되는 인자를 받습니다. 매개변수 이름은 함수 안에서만 쓰이며, 호출마다 다른 값을 넣어 같은 계산을 재사용할 수 있습니다.
일상에서 보면주스 기계의 투입구는 같지만 사과를 넣을지 귤을 넣을지 매번 선택하는 것과 같습니다.
def double(number):
print(number * 2)
double(3)
double(7)
한 줄씩 보기- number 매개변수 하나를 받습니다.
- 받은 값을 두 배로 출력합니다.
- 3과 7을 각각 인자로 전달합니다.
직접 값 바꾸기두 수를 받아 곱을 출력하는 multiply(a, b)를 만들어 보세요.
흔한 실수정의한 매개변수 수와 전달한 인자 수가 다르면 TypeError가 발생합니다.
짧은 확인double(5)에서 매개변수와 인자는 각각 무엇일까요?
03
return은 계산 결과를 돌려준다
print는 화면에 값을 보여 주지만 호출한 곳에서 재사용할 결과를 만들지는 않습니다. return은 값을 호출한 곳으로 돌려주고 즉시 함수를 끝냅니다. 계산 함수는 보통 출력보다 반환을 담당합니다.
일상에서 보면print는 전광판에 결과를 보여 주는 일이고, return은 결과물을 손에 건네 다음 작업에 쓰게 하는 일입니다.
def add(a, b):
return a + b
result = add(3, 4)
print(result * 2)
한 줄씩 보기- 두 값을 받는 함수를 정의합니다.
- 합계를 호출한 곳에 반환합니다.
- 반환값 7을 result에 저장합니다.
- 저장한 값을 다음 계산에 사용합니다.
직접 값 바꾸기return a + b를 print(a + b)로 바꾸면 result에 무엇이 저장되는지 확인하세요.
흔한 실수return을 반복문 안에 너무 일찍 두면 첫 반복 후 함수가 종료됩니다.
짧은 확인함수 결과를 다른 계산에 사용하려면 print와 return 중 무엇이 필요할까요?
04
기본값과 여러 반환값
매개변수에 기본값을 지정하면 호출할 때 해당 인자를 생략할 수 있습니다. return에 값을 쉼표로 나열하면 여러 결과를 한 번에 돌려주고 여러 변수로 나누어 받을 수 있습니다.
일상에서 보면주문 옵션을 말하지 않으면 기본 크기를 쓰고, 영수증과 거스름돈을 함께 받는 것과 같습니다.
def score_range(scores, label='점수'):
return label, min(scores), max(scores)
name, low, high = score_range([80, 65, 95])
print(name, low, high)
한 줄씩 보기- label의 기본값을 점수로 정합니다.
- 이름·최솟값·최댓값을 함께 반환합니다.
- 세 반환값을 세 변수로 나눠 받습니다.
직접 값 바꾸기두 번째 인자로 '시험'을 전달해 출력 이름을 바꿔 보세요.
흔한 실수기본값이 있는 매개변수 뒤에 기본값이 없는 매개변수를 둘 수 없습니다.
짧은 확인기본값이 지정된 인자를 호출에서 생략하면 어떤 값이 사용될까요?
05
작은 함수를 조합하면 큰 흐름이 보인다
한 함수가 입력, 계산, 출력까지 모두 맡게 하지 말고 평균 계산, 통과 수 계산, 문장 만들기처럼 역할별로 나눕니다. 각 함수는 한 가지 일을 하고 반환값으로 연결하면 테스트와 수정이 쉬워집니다.
일상에서 보면한 사람이 모든 일을 하는 대신 재료 준비·조리·포장을 나눠 연결하는 작업대와 같습니다.
def average(scores):
return sum(scores) / len(scores)
def make_message(scores):
value = average(scores)
return f'평균: {value:.1f}'
print(make_message([80, 70, 90]))
한 줄씩 보기- 평균 계산만 담당하는 함수를 만듭니다.
- 메시지 함수가 평균 함수를 호출합니다.
- 반환받은 값을 문장으로 바꿉니다.
- 최상위 코드가 완성 문장을 출력합니다.
직접 값 바꾸기최고 점수를 반환하는 함수를 추가하고 make_message에서 함께 사용해 보세요.
흔한 실수함수가 전역 변수에 지나치게 의존하면 어떤 입력으로 동작하는지 알기 어렵습니다.
짧은 확인평균 계산 규칙이 바뀌면 어느 함수만 수정하면 될까요?