핵심정리

함수

함수는 자주 사용하는 코드를 한 곳에 모아놓은 것을 뜻합니다.

def 함수이름():    # 함수 만들기
    코드
 
함수()    # 함수 호출

함수를 호출할 때 함수 안에 넣는 값을 인수라고 하며 인수는 매개변수를 통해서 사용할 수 있습니다. 그리고 함수가 호출 된 뒤 함수 안에서 나오는 값을 반환값이라고 하며 반환값은 함수 안에서 return으로 반환합니다.

def 함수이름(매개변수1, 매개변수2):    # 매개변수 지정
    return 반환값                      # 함수에서 값 반환
 
변수 = 함수(인수1, 인수2)    # 함수에 인수를 넣어서 호출한 뒤 함수가 반환값을 변수에 저장

매개변수와 인수

함수 바깥에서 전달받은 값이 저장되는 변수를 매개변수라고 부릅니다.

def add(a, b):    # a와 b가 매개변수
    return a + b

함수를 호출할 때 전달하는 값이나 변수를 인수라고 부릅니다.

add(10, 20)    # 10과 20이 인수

함수에서 값을 여러 개 반환하기

함수에서 값을 여러 개 반환할 때는 return에 값이나 변수를 ,(콤마)로 구분해서 지정합니다. 이렇게 하면 반환값을 변수 여러 개에 저장할 수 있습니다.

def 함수이름(매개변수):
    return 반환값1, 반환값2    # 값을 여러 개 반환
 
변수1, 변수2 = 함수(인수)      # 반환값을 변수 여러 개에 저장

위치 인수

함수에 인수를 순서대로 넣는 방식을 위치 인수라고 합니다. 위치 인수를 사용하는 함수는 리스트(튜플) 앞에 *(애스터리스크)를 붙여서 리스트 언패킹으로 넣을 수 있습니다.

def 함수이름(매개변수1, 매개변수2):    # 위치 인수를 사용하는 함수
    코드
 
함수(*리스트)    # 리스트 언패킹
함수(*튜플)      # 튜플 언패킹

위치 인수를 사용하는 가변 인수 함수는 매개변수 앞에 *를 붙여서 만듭니다.

def 함수이름(*매개변수):    # 위치 인수를 사용하는 가변 인수 함수
    코드
 
함수(인수1, 인수2)    # 인수 여러 개를 직접 넣기
함수(*리스트)         # 리스트 언패킹
함수(*튜플)           # 튜플 언패킹

키워드 인수

함수에 넣는 인수에 이름(키워드)를 붙이는 방식을 키워드 인수라고 합니다. 키워드 인수는 딕셔너리 앞에 **(애스터리스크 두 개)를 붙여서 딕셔너리 언패킹으로 넣을 수 있습니다.

함수(키워드1=1, 키워드2=2)     # 함수를 키워드 인수 방식으로 호출
 
함수(**딕셔너리)    # 딕셔너리 언패킹

키워드 인수를 사용하는 가변 인수 함수는 매개변수 앞에 **를 붙여서 만듭니다.

def 함수이름(**매개변수):    # 키워드 인수를 사용하는 가변 인수 함수
    코드
 
함수(키워드1=1, 키워드2=2)    # 키워드 인수를 직접 넣기
함수(**딕셔너리)                  # 딕셔너리 언패킹

매개변수의 초깃값

함수를 만들 때 매개변수에 초깃값을 지정하면 함수를 호출할 때 해당 인수를 비워두고 호출할 수 있습니다.

def 함수이름(매개변수=):    # 매개변수에 초깃값 지정
    코드
 
함수()    # 매개변수에 초깃값이 있으므로 인수를 비워두고 호출

함수의 재귀호출

함수 안에서 함수 자기자신을 호출하는 방식을 재귀호출이라 합니다.

def factorial(n):   # 재귀호출로 팩토리얼을 구하는 함수
    if n == 1:      # n이 1일 때
        return 1    # 1을 반환하고 재귀호출을 끝냄
    return n * factorial(n - 1)    # n과 factorial 함수에 n - 1을 넣어서 반환된 값을 곱함

재귀호출은 반드시 종료 조건을 만들어주어야 합니다. 종료 조건이 없으면 함수가 계속 호출되다가 스택 오버플로우 에러가 발생합니다.