728x90
이번 포스팅은 함수의 매개변수에서 입력받는 *args와 **kwargs에 대해 알아보겠습니다. 아마 인공지능이나 여러 코드를 보면 다음과 같은 코드를 마주칠 일이 있을 겁니다.
def args_and_kwargs(*args, **kwargs):
다음과 같이 *와 **로 인자를 받는 함수를 보셨을 겁니다.
이 함수의 차이에 대해서 설명해 드리겠습니다.
*args 가변 위치 인자(Variable Positional Arguments)
- * args는 함수에 가변적인 개수의 비키워드 인자를 전달할 때 사용
- 인자들을 튜플의 형태로 입력을 받음
- 함수를 정의하면서 비키워드 인자의 수를 모를 때 사용
위의 말이 어렵다면 예시를 통해 설명해 드리겠습니다.
def print_args(*args):
print(type(args))
print(args)
for arg in args:
print(arg)
print_args('hello', 'world', 'I', 'am', 'here')
# Output
# <class 'tuple'>
# ('hello', 'world', 'I', 'am', 'here')
# hello
# world
# I
# am
# here
함수를 사용할 때 Hello, world, I, am, here이 tuple로 묶여서 args에 입력되는 것을 볼 수 있습니다.
출력이 tuple형태로 묶여서 출력되는 것을 볼 수 있습니다.(위치 순서 중요!)
**kwargs 가변 키워드 인자(Variable Keyword Arguments)
- **kwargs는 함수에 가변적인 개수의 키워드 인자를 전달할 때 사용
- 인자들을 딕셔너리 형태로 받음
- 함수를 정의할 때 어떤 키워드 인자가 전달될지 모를 때 사용
이것도 마찬가지로 예시를 통해 설명해 드리겠습니다.
def print_kwargs(**kwargs):
print(type(kwargs))
print(kwargs)
for key, value in kwargs.items():
print(f"{key}: {value}")
print_kwargs(name='John', age=25, job='Developer')
# Output
# <class 'dict'>
# {'name': 'John', 'age': 25, 'job': 'Developer'}
# name: John
# age: 25
# job: Developer
함수를 사용할 때 name='John', age=25, job='Developer'이 dictionary로 묶여서 kwargs에 입력되는 것을 볼 수 있습니다.
출력이 dictionary형태로 묶여서 출력되는 것을 볼 수 있습니다.
*args와 **kwargs 함께 사용하기
함수에서 위치 인자와 키워드 인자를 동시에 가변적으로 받고 싶을 때 함께 사용할 수 있습니다.
def print_args_and_kwargs(*args, **kwargs):
for arg in args:
print(arg)
for key, value in kwargs.items():
print(f"{key}: {value}")
print_args_and_kwargs('I', 'like', 'Python', language='Python', version=3.8)
# Output
# I
# like
# Python
# language: Python
# version: 3.8
이러한 방식으로, *args와 **kwargs는 파이썬에서 함수의 유연성을 크게 높여줍니다.
특히 인공지능에서 여러 개의 인자들을 받을 때 자주 사용하므로 알아두어야 하는 기능 중 하나입니다.
그림으로 표현하면 다음과 같습니다.
'Coding > Python' 카테고리의 다른 글
[Python] assert, 가정 설정문 사용법 정리 (0) | 2024.01.17 |
---|---|
[Python] Jupyter Notebook 가상환경 커널 추가 및 삭제 (0) | 2024.01.11 |
[Python] 문자열 템플릿(string Template) (0) | 2023.12.30 |
[Python] 가상환경 생성과 삭제, 활성화 및 비활성화(MacOS, Windows) (1) | 2023.12.27 |
[Python] for else구문과 while else구문 정리 (0) | 2023.11.30 |