다양한 매개변수
다양한 매개변수
- 위치 매개변수(positional parameter)
- 기본 매개변수(default parameter)
- 키워드 매개변수(keyword parameter)
- 위치 가변 매개변수(positional variable length parameter)
- 키워드 가변 매개변수(keyword variable length parameter)
위치 매개변수(positional parameter)
- 가장 기본적인 매개변수
- 함수를 호출할 때 순서대로 데이터(인자)를 넘겨줘야 한다.
- 다른 매개변수와 함께 쓸 때는 항상 맨 앞에 써야 한다.
def my_func(a, b):
print(a, b)
my_func(2, 3)
기본 매개변수(default parameter)
- 매개변수의 기본적인(Default) 값
- 함수를 정의할 때 매개변수의 기본 값을 지정할 수 있다.
예제에서는 content 가 기본 매개변수가 된다. 기본 매개변수는 함수를 호출할 때 다시 할당을 하지 않아도 된다.
def post_info(title, content='내용없음'):
print('제목 :', title)
print('내용 :', content)
post_info('출석')
제목 : 출석
내용 : 내용없음
content를 두 번째 인자로 줘야 하는데 없으니깐 그냥 기본값을 쓴다.
키워드 매개변수(keyword parameter)
- 함수 호출 시에 키워드를 붙여 호출한다.
- 매개변수의 순서를 지키지 않아도 된다.
def post_info(title, content):
print('제목 :', title)
print('내용 :', content)
>>> post_info(content='없음', title='내용 무')
제목 : 내용 무
내용 : 없음
함수에서의 인자 순서와 다르게 인자를 키워드를 붙여 전달해주었다.
위치 가변 매개변수(positional variable length parameter)
- 가변 매개변수 = 개수가 정해지지 않은 매개변수
- 매개변수 앞에
*
가 붙는다. (튜플형)
def print_fruits(*args):
print(args)
for arg in args:
print(arg)
>>> print_fruits('apple', 'orange', 'mango', 'grape')
('apple', 'orange', 'mango', 'grape')
apple
orange
mango
grape
키워드 가변 매개변수(keyword variable length parameter)
- 가변 매개변수 = 개수가 정해지지 않은 매개변수
- 매개변수 앞에
**
가 붙는다. (딕셔너리형)
def comment_info(**kwargs):
print(kwargs)
for key, value in kwargs.items():
print(f'{key} : {value}')
>>> comment_info(name='안녕', content='클레오파트라')
{'name': '안녕', 'content': '클레오파트라'}
name : 안녕
content : 클레오파트라
매개변수 작성 순서
위치 -> 기본 -> 위치 가변 -> 키워드(기본) -> 키워드 가변
def post_info(*tags, title, content, **kwargs):
print(f'제목 : {title}')
print(f'내용 : {content}')
print(f'태그 : {tags}')
>>> post_info('#안녕', '#파이썬', '함수', '내용 없음')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: post_info() missing 2 required keyword-only arguments: 'title' and 'content'
이렇게 기본 매개변수 앞에 위치 가변 매개변수를 쓸 경우 키워드를 적어주지 않으면 에러가 난다. 그 이유는 모든 인자들이 다 *tags
에 할당되기 때문이다.
매개변수의 순서를 바꾸거나 키워드를 사용해주면 이 에러를 해결할 수 있다.
>>> post_info('#안녕', '#파이썬', title='함수', content='내용 없음')
제목 : 함수
내용 : 내용 없음
태그 : ('#안녕', '#파이썬')
정의된 함수에 튜플 및 딕셔너리 전달
이번에는 반대로 정의된 함수에 매개변수로 튜플 및 딕셔너리를 입력하는 방법을 정리해보자. 위에서의 *
의 활용 방식과 매우 유사한데 만약 튜플을 넘기고 싶다면 튜플의 변수명 앞에 *
을 하나 붙이고 함수로 넘기고 딕셔너리의 경우에는 *
을 2개 붙여서 넘기면 된다.
다음은 튜플을 함수의 매개변수로 넘기는 방법에 대한 예제이다.
def some_func(first_val, second_val, third_val):
print("first:", first_val)
print("second:", second_val)
print("third:", third_val)
some_args = 4, "foo", "bar"
print(some_args)
some_func(*some_args)
>>>
(4, 'foo', 'bar')
first: 4
second: foo
third: bar
튜플 some_args를 정의한 이후에 함수 some_func에 *
을 하나 붙여서 some_func(*some_args)
와 같이 매개변수로 넘겨주면 된다.
마찬가지로 딕셔너리를 함수의 매개변수로 넘기는 방법에 대한 예제이다.
some_kwargs = {"first_val": 4, "second_val": "foo", "third_val": "bar"}
some_func(**some_kwargs)
>>>
first: 4
second: foo
third: bar