기본 미션 : p. 287
[직접 해보는 손코딩: 범위 내부의 정수를 모두 더하는 함수]실행 후 코드가 입력된 화면 및 실행 결과 화면 캡처하기선택 미션 : 매개변수, 기본 매개변수, 가변 매개변수에 대해 간략하게 정리하기
[직접 해보는 손코딩: 범위 내부의 정수를 모두 더하는 함수] 실행 후 코드가 입력된 화면 및 실행 결과 화면 캡처하기
: 괄호 () 안의 모든 것
def 함수 이름(매개변수, 매개변수, ...):
문장
매개변수는 다음과 같이 함수를 생성할 때 괄호 내부에 식별자를 입력해서 만든다.
소스코드 param_basic.py
def print_n_times(value, n):
for i in range(n):
print(value)
print_n_times("안녕하세요", 5)

TypeError (예외 처리)에 발생한다.
def print_n_times(value, n): # 매개변수를 두 개 지정했는데
for i in range(n):
print(value)
print_n_times("안녕하세요") # 하나만 넣었음
print_n_times()라는 함수의 매개변수 n이 없다 라는 오류이다.
def print_n_times(value, n): # 매개변수를 두 개 지정했는데
for i in range(n):
print(value)
print_n_times("안녕하세요", 10, 20) # 하나만 넣었음
print_n_times()라는 함수는 2개의 매개변수가 필요한데 3개가 들어왔다 라는 오류이다.
: 매개변수 개수가 변할 수 있는 매개변수로 가변 매개변수 함수에서 사용된다.
가변 매개변수 함수 : 매개변수를 원하는 만큼 받을 수 있는 함수def 함수 이름(매개변수, 매개변수, ... *가변 매개변수):
문장
가변 매개변수를 사용할 때는 다음과 같은 제약이 있다.
일반 매개변수가 올 수 없다.하나만 사용할 수 있다.이러한 제약은 가변 매개변수가 어디부터 어디까지 있는지를 손쉽게 알아내기 위해서 존재한다.
소스 코드 variable_param.py
def print_n_times(n, *values):
# n번 반복합니다
for i in range(n):
# values는 리스트처럼 활용합니다.
for value in values:
print(value)
# 단순한 줄바꿈
print()
# 함수 호출
print_n_times(3, "안녕하세요", "즐거운", "파이썬 프로그래밍")

: 매개변수를 입력하지 않았을 경우 매개변수에 들어가는 기본값
매개변수 = 값
# 예시
sep = ' '
end = '\n'
file = sys.stdout
flush = False
기본 매개변수 뒤에는 일반 매개변수가 올 수 없다.소스코드 default_param.py
def print_n_times(value, n=2):
# n번 반복
for i in range(n):
print(value)
# 함수 호출
print_n_times("안녕하세요")

만약 print_n_times(n=2, value) 형태로 사용할 수 있다면 print_n_times("안녕하세요")라고 입력했을 떄 "안녕하세요"라는 글자가 첫 번째 매개변수에 할당되어야 하는지, 두 번째 매개변수에 할당되어야 하는지 확실하게 알 수 없다. 그래서 파이썬 프로그래밍 언어는 내부적으로 기본 매개변수 뒤에 일반 매개변수가 오지 못하게 막은 것이다.
그렇다면 가변 매개변수와 기본 매개변수를 같이 써도 될까?
기본 매개변수가 가변 매개변수보다 앞에 오면 기본 매개변수의 의미가 사라지게 된다.
def print_n_times(n=2, *values):
# n번 반복합니다
for i in range(n):
# values는 리스트처럼 활용합니다.
for value in values:
print(value)
# 단순한 줄바꿈
print()
# 함수 호출
print_n_times("안녕하세요", "즐거운", "파이썬 프로그래밍")
이렇게 실행할 경우, n에는 "안녕하세요"가 들어가게 되고 values에는 ["즐거운", "파이썬 프로그래밍"]이 들어가게 된다.
range()함수의 매개변수에는 숫자만 들어갈 수 있으므로 다음과 같은 오류가 발생한다.
따라서 기본 매개변수는 가변 매개변수 앞에 써도 의미가 없다는 것을 기억하자.
def print_n_times(*values, n=2):
# n번 반복합니다
for i in range(n):
# values는 리스트처럼 활용합니다.
for value in values:
print(value)
# 단순한 줄바꿈
print()
# 함수 호출
print_n_times("안녕하세요", "즐거운", "파이썬 프로그래밍", 3)
이렇게 ["안녕하세요", "즐거운", "파이썬 프로그래밍", 3]을 두 번 출력하게 된다. 가변 매개변수가 우선되는 것이다.