[Python] *args와 **kwargs

haejun-kim·2020년 6월 22일
1

[Python]

목록 보기
6/19

📕 python 의 함수에 대해 공부하다보면 *args, **kwargs 라는 내용을 볼 수 있다.
개념은 알겠으나 정확히 어떻게 사용하는지 감이 잘 안잡혀 복습 겸 적는 포스트다.


*args

*args*arguments의 줄임말이다.
줄임말일 뿐 꼭 저 단어를 사용할 필요는 없다. 얼마든지 원하는 단어를 사용해도 좋다.

*a 라고 적든 *qiwefkjqwf로 적든 상관이 없다. 앞에 *만 잘 붙여주자.
(상관은 없지만 남이 봤을 때 무슨 역할을 하는지 한 눈에 알아볼 수 있는 이름이 좋다)
중요한건 이름이 아니라 하는 역할과 사용 방법이다.

이 지시어는 여러개의 매개변수를 함수로 받고싶을 때 사용하는 지시어다.

*args에서 두가지를 꼭 기억하자

  1. 결과값의 형태
  2. 순서

결과값의 형태

def name(*args):
    print(args)

name("홍길동")
name("홍길동", "이순신", "김전일")

함수 name의 매개변수로 *args를 주었다. 고로 이 함수는 여러개의 매개변수를 받을 수 있다는 의미이다.
그래서 함수를 호출했을 때 인자값으로 몇개의 이름을 주어도 출력이 잘 되는 것을 확인할 수 있다.

실행결과

여기서 확인하고 넘어가야 할 점은 결과값 튜플 형태로 출력됐다는 것이다. 고로 이 데이터는 수정할 수 없는 데이터이며, 위치값을 인덱싱 할 수 있다는 뜻이다.

순서

또 한가지 기억해두어야 할 점은 순서이다.

def name(nickname, *args):
    print(nickname, args)
name("닉네임", "홍길동", "이순신", "김전일")

위의 예문에서 매개변수를 하나 추가해주었다. 그리고 실행을 시키면

값이 출력된다.

하지만 여기서 nickname*args의 위치를 바꿔보자

에러가 발생한다.

  • 파이썬에서는 어디서부터 어디까지 * 변수에 담아야 할지 알 수 없기 때문에, 일반 변수를 앞에 두고 그 뒤에 *변수를 지정해주어야 에러가 발생하지 않는다.

**kwargs

**kwargskeyword argument의 줄임말로 키워드를 제공한다.

**kwargs는 (키워드 = 특정 값) 형태로 함수를 호출할 수 있다.

def name2(**kwargs):
    print(kwargs)
    
name2(name1="홍길동",name2="이순신")

실행 결과

*args와는 다르게 결과값이 딕셔너리형태로 출력된다.

순서

*args와 마찬가지로 순서가 중요한데, *args**kwargs를 함께 사용하는 경우

*변수를 **변수보다 앞에 두어야 한다.

def name(nickname, *args, **kwargs):

그래야 파이썬에서 **변수를 어디부터 어디까지 담아야할지를 인식한다.


개념 자체는 어렵지 않지만 실제로 내가 구현을 할 때 '이부분은 이걸 써야겠다' 라고 생각하는게 어려운 것 같다. 더 많이 연습을 해봐야겠다.

0개의 댓글