기본 미션 : 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]
을 두 번 출력하게 된다. 가변 매개변수가 우선되는 것
이다.