해당 자료를 조사하는데 argument와 parameter가 여기저기 적혀 있어서 너무 혼란스러웠다. 그래서 이것부터 정리하고 넘어가자. 쉽게 말하면 parameter(매개변수)는 변수 이름
이고 argument(전달인자, 인자)는 값
이므로 서로 다르다.
default value parameter
와non-default value parameter
나뉘며*args
와 **kwargs
로 나뉜다.위치 인자(positional arguments)
: 함수 호출 시 전달되는 값이 매개변수에 순서대로 전달되는 인자. 가장 일반적으로 사용하는 argument다.def print_num(a, b, c):
print(a, b, c)
print_num(2022, 5, 28) # 2022 5 28
# 이처럼 2022, 5, 28이 순서대로 a, b c에 전달되었다.
가변 인자(variable length arguments)
: 개수가 변할 수 있는 인자, 즉 함수 호출 시 인자의 개수를 다양하게 바꾸며 전달할 수 있다.def print_num(*args):
for i in args:
print(i)
print_num() # 아무 것도 안 나온다
print_num(2022) # 2022
print_num(2022, 5) # 2022 5
print_num(2022, 5, 28) # 2022 5 28
- 함수를 선언할 때
미리 값이 정해지게 되는
매개변수이다.- 기본 값이 이미 존재하는 매개변수를 받을 때 사용하고
- 언제든지 함수를 사용할 때 값을 변경 할 수 있다.
- 변경 가능하기에, default는 non-default보다 뒤에 위치해야 한다.
- 코드의 중복을 줄여 가독성을 높일 수 있다.
def print_def_val_param(count, last="boom!"):
for i in range(count, 0, -1):
print(i)
print(last)
print_def_val_param(5)
5
4
3
2
1
boom!
값의 변경도 가능하다
def print_def_val_param(count, last="boom!"):
for i in range(count, 0, -1):
print(i)
print(last)
print_def_val_param(5, "half of 1")
5
4
3
2
1
half of 1"
- 함수를 선언할 때
미리 값이 정해져 있지 않은
매개변수이다.- 제일 흔히 쓰이는 종류의 매개변수이다.
- 함수 호출 시, 매개변수의 순서대로 인자를 넣어주어야 한다.
몇몇 단점이 존재한다.
1. 논리적 오류를 발생시킬 수 있다.
2. 인자에 어떤 타입이 들어오는지 몰라 가독성이 떨어진다.
def print_non_def_val_param(name, hobby):
return f"I am {name} and I like {hobby}"
# 1. 순서대로 잘 기입하면 문제 없다.
print(print_non_def_val_param("taekwon", "to drink tea"))
# 2. 순서가 틀리면 의도치 않은 오류를 발생시킬 수 있다.
print(print_non_def_val_param("to drink tea", "taekwon"))
I am taekwon and I like tea
I am to drink tea and I like taekwon
우선 잠시 default value parameter를 default로, non-default value parameter는 non-default로 줄여서 말해 보자.
def love_you(my_name = "정우성", your_name):
print(f"{my_name} loves {your_name}")
love_you("아이유")
> Traceback (most recent call last):
File "python", line 1
SyntaxError: non-default argument follows default argument