📕 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):
그래야 파이썬에서 **
변수를 어디부터 어디까지 담아야할지를 인식한다.
개념 자체는 어렵지 않지만 실제로 내가 구현을 할 때 '이부분은 이걸 써야겠다' 라고 생각하는게 어려운 것 같다. 더 많이 연습을 해봐야겠다.