가변 인자는 함수가 여러 개의 인자를 받을 수 있게 해줘서 유용하게 활용할 수 있습니다. 이번 포스팅에서는 이 가변 인자를 간단한 것부터 복잡한 것까지 차근차근 실습코드를 통해 연습해보겠습니다. 실습코드를 통해 가변인자에 대해 익숙해지는 것이 이번 포스팅의 목적입니다.
글의 순서
가변인자, *args, **kwargs
*args
키워드 가변인자 **kwargs
*args와 **kwargs 동시 사용
가변인자, *args, **kwargs
가변인자는 파이썬에서 함수를 정의할 때, 인자(arguments)의 갯수를 정하지 않고 가변적으로 사용할 수 있도록 선언하는 것입니다. 가변인자는 *args, **kwargs와 같이 2가지 방식으로 활용할 수 있습니다.
*args
*args는 함수에 여러 개의 인자를 전달할 때 사용합니다. 여기서 *은 임의의 개수의 인자를 받을 수 있게 해줍니다. 실습코드01에서 print_args 함수는 임의의 개수의 인자를 받아서 출력합니다.
1 2 3 4 5 6 |
def print_args(*args): for arg in args: print(arg) print_args(1, 2, 3) print_args('apple', 'banana', 'orange') |
1 2 3 4 5 6 |
1 2 3 apple banana orange |
키워드 가변인자 **kwargs
키워드의 kw, 가변인자의 args가 합성된 것이라고 생각하시면 됩니다. **kwargs는 키워드 인자를 여러 개 받을 때 사용합니다. 여기서 **은 딕셔너리 형태로 인자를 받을 수 있게 해줍니다. 실습코드 02에서 print_kwargs 함수는 키워드 인자를 딕셔너리 형태로 받아서 출력합니다.
1 2 3 4 5 6 7 |
def print_kwargs(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}") print_kwargs(name='Suji', age=25) print_kwargs(country='Korea', city='Seoul') print_kwargs(Company='Apple', chip='M4') |
1 2 3 4 5 6 |
name: Suji age: 25 country: Korea city: Seoul Company: Apple chip: M4 |
키워드 인자로 받은 정보를 포맷팅해서 출력하는 함수를 작성해보겠습니다. 실습코드 03에서 보시는 바와 같이 포맷팅이란 문자열의 출력형식을 지정하는 것입니다. 예를 들어 문자열의 맨 첫 번째 문자를 대문자로 바꾼다거나, 모든 문자열을 대문자로 바꾸는 것, 또는 모든 문자열을 소문자로 바꾸는 것 등을 의미합니다. 실습코드 03에 각각의 경우를 나타내었습니다. key.capitalize, key.upper(), key.lower()가 각각 이들 포매팅 함수를 나타냅니다.
1 2 3 4 5 6 7 |
def print_formatted_info(**kwargs): for key, value in kwargs.items(): print(f"{key.capitalize()}: {value.capitalize()}") print(f"{key.upper()}: {value}") print(f"{key.lower()}: {value}") print_formatted_info(company='openai', role='researcher') |
1 2 3 4 5 6 7 |
name: Suji Company: Openai COMPANY: openai company: openai Role: Researcher ROLE: researcher role: researcher |
*args와 **kwargs 동시 사용
*args와 **kwargs를 함께 사용할 수도 있습니다. 이때는 순서에 주의해야 하는데, *args가 먼저 오고 **kwargs가 그 다음에 와야 합니다..
1 2 3 4 5 6 7 8 9 10 |
def print_args_kwargs(*args, **kwargs): print("Args:") for arg in args: print(arg) print("Kwargs:") for key, value in kwargs.items(): print(f"{key}: {value}") print_args_kwargs(1, 2, 3, name='Suji', age=25) |
1 2 3 4 5 6 7 |
Args: 1 2 3 Kwargs: name: Suji age: 25 |
마치며 …
이번 포스팅에서는 이 가변 인자를 간단한 것부터 복잡한 것까지 차근차근 실습코드를 통해 연습해보았습니다. 파이썬 함수에서 *args, **kwargs라는 가변인자는 파이썬 함수의 유연성을 높일 수 있는 좋은 방법입니다. 유용하게 활용해 보시기 바랍니다.
함께 참고하면 좋은 글
▶ 파이썬 출력 (Python print) 함수 예제
▶ 파이썬 프로그래밍 시작 (10) 자료구조(Data Structure) : 딕셔너리
▶ 파이썬 프로그래밍 시작 (5) 연습문제 : 함수 만들기
▶ 파이썬 프로그래밍 시작 (3) 파이썬 함수 실습
▶ 호크아이 거래량 지표 (HawkEye Volume Indicator) 파이썬 코딩
참고자료
▶ *args and **kwargs in Python