📕 python 의 함수에 대해 공부하다보면 *args, **kwargs 라는 내용을 볼 수 있다.
개념은 알겠으나 정확히 어떻게 사용하는지 감이 잘 안잡혀 복습 겸 적는 포스트다.
*args 는 *arguments의 줄임말이다.
줄임말일 뿐 꼭 저 단어를 사용할 필요는 없다. 얼마든지 원하는 단어를 사용해도 좋다.
*a 라고 적든 *qiwefkjqwf로 적든 상관이 없다. 앞에 *만 잘 붙여주자.
(상관은 없지만 남이 봤을 때 무슨 역할을 하는지 한 눈에 알아볼 수 있는 이름이 좋다)
중요한건 이름이 아니라 하는 역할과 사용 방법이다.
이 지시어는 여러개의 매개변수를 함수로 받고싶을 때 사용하는 지시어다.
*args에서 두가지를 꼭 기억하자
def name(*args):
print(args)
name("홍길동")
name("홍길동", "이순신", "김전일")
함수 name의 매개변수로 *args를 주었다. 고로 이 함수는 여러개의 매개변수를 받을 수 있다는 의미이다.
그래서 함수를 호출했을 때 인자값으로 몇개의 이름을 주어도 출력이 잘 되는 것을 확인할 수 있다.
실행결과
여기서 확인하고 넘어가야 할 점은 결과값 튜플 형태로 출력됐다는 것이다. 고로 이 데이터는 수정할 수 없는 데이터이며, 위치값을 인덱싱 할 수 있다는 뜻이다.
또 한가지 기억해두어야 할 점은 순서이다.
def name(nickname, *args):
print(nickname, args)
name("닉네임", "홍길동", "이순신", "김전일")
위의 예문에서 매개변수를 하나 추가해주었다. 그리고 실행을 시키면

값이 출력된다.
하지만 여기서 nickname과 *args의 위치를 바꿔보자

에러가 발생한다.
* 변수에 담아야 할지 알 수 없기 때문에, 일반 변수를 앞에 두고 그 뒤에 *변수를 지정해주어야 에러가 발생하지 않는다.**kwargs는keyword argument의 줄임말로 키워드를 제공한다.
**kwargs는 (키워드 = 특정 값) 형태로 함수를 호출할 수 있다.
def name2(**kwargs):
print(kwargs)
name2(name1="홍길동",name2="이순신")
실행 결과
*args와는 다르게 결과값이 딕셔너리형태로 출력된다.
*args와 마찬가지로 순서가 중요한데, *args와 **kwargs를 함께 사용하는 경우
*변수를**변수보다 앞에 두어야 한다.
def name(nickname, *args, **kwargs):
그래야 파이썬에서 **변수를 어디부터 어디까지 담아야할지를 인식한다.
개념 자체는 어렵지 않지만 실제로 내가 구현을 할 때 '이부분은 이걸 써야겠다' 라고 생각하는게 어려운 것 같다. 더 많이 연습을 해봐야겠다.