파이썬은 참 편리한 언어이다. 여러가지 내부적으로 처리해주는 기능들이 있으면서도, 이러한 부분들이 개발자들이 사용하는데 크게 이질감이 있지 않다.
이렇게 개발자의 편의를 지원해주는 기능들을 매직 메소드라는 것이 있고, 그중에 *args와 **kwargs 역시 이러한 매직 메소드로 지원되는 기능인데 어떻게 활용 할 수 있는지에 대해서 간략히 정리해 본다.
*args와 **kwargs 는 보다 쉽게 아스키로 표현된다고 할 수 있다.
* 아스키 기호 하나: 값를 의미
** 아스키 기호 두개: 사용하면 키가 있는 인자값을 의미
이 매직 메소드를 사용하기 유용한 곳은 어떠한 변수 값을 받을지 알 수 없는 경우에 여기에 값이 있는지를 확인해서 처리할 수 있기 때문에 유용하게 사용할 수 있다.
*args(Arguements)
인자값만을 전달하는 구조로써, Type은 tuple 형식으로 데이터가 저장된다.
튜플은 리스트보다 추가, 삭제등이 제한적이지만 데이터가 리스트 형태로 관리하여 사용할 수 있다.
("one","two","three")
def args_task(*numbers):
print(type(numbers))
for value in numbers:
print(value)
if __name__ == '__main__':
args_task("one","two","three")
위와 같이 *로 선언하여 여러 인자 값이 들어오더라도 함수에서 이를 받아서 처리하는게 가능하다.
**kwargs(Key With Arguements)
키, 값 형태로 전달하는 구조로써, Type은 dict 형식으로 데이터가 저장된다.
딕셔너리 구조이기 때문에 키를 기준으로 값을 검색하거나 변경하는것이 가능하다.
{'one': 1, 'two': 2}
def args_task(**numbers):
print(type(numbers))
for key, value in numbers.items():
print(key, value)
if __name__ == '__main__':
args_task(one = 1, two =2)
주의할점
*args와 **kwargs 를 사용할 때에는 순서가 중요하다.
1. 먼저 가장 일반 변수가 우선적으로 사용해야다 한다.
2. args가 kwargs 보다 우선적으로 사용해야 한다.
즉 def test(name, *args, **kwargs) 순서대로 사용해야 한다.
'Python' 카테고리의 다른 글
SQLAlchemy - QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30.00 (0) | 2024.03.25 |
---|---|
Python - GIL, 멀티 쓰레드(thread) vs 멀티 프로세스(multiprocessing, subprocess) (0) | 2024.03.25 |
Python - JSON 데이터 검색 및 불러오기(dumps, loads, items) (0) | 2024.03.25 |
Python - FastAPI with CRUD application by pydantic (0) | 2024.03.25 |
Python - FastAPI Relationship SQL data 처리 (0) | 2024.03.25 |