Hello Computer Vision

*args와 **kwargs 쓰임 본문

딥러닝

*args와 **kwargs 쓰임

지웅쓰 2022. 12. 30. 22:14

딥러닝 모델들을 공부하다 다른 사람들의 모델들의 코드를 보고 공부할 때가 있는데

함수 내에 *args 혹은 **kwargs 가 들어간 것을 심심찮게 볼 수 있다.

예전부터 봐왔었고 그럴 때마다 궁금해서 쳐봤는데 이번에 정리하려고한다.

 

*args 란?

args 는 arguments 의 줄임말이다.

우리가 함수를 정의할 때 앞으로 쓰일 모든 것들을 미리 파라미터로 정의하면 좋겠지만 그러지 못할 때도 있다.

그럴 때 필요한 것들만 미리 정의해놓고 나머지는 *args로 남겨두는 것이다. 예시로 한번 살펴보겠다.

def myfunction(first, second, *args):
  print(first, second)
  for arg in args:
    print(arg)
myfunction('세수하기','공부하기', '운동하기','책읽기','유튜브보기기')


세수하기 공부하기
운동하기
책읽기
유튜브보기기

정의한 함수에서는 오늘 할 일들을 넣었다 하자. 그러나 2가지 제외하고 뭔가 할 일이 더 있을수 있다고 생각해 *args로 남겨둔 것이다.

그리고 만약 할 일들이 추가되었을 때 함수는 이미 *args를 받은 상태이므로 함수에 따로 정의없이 넣어도 되는 것이다.

 

**kwargs 란?

keyword arguments 의 줄임말이다.

여기서 keyword argument란 함수에서 first = '세수하기', second = '공부하기' 처럼 미리 정의한 것이다.

이것 또한 예시로 살펴보겠다.

 

def myfunction(first, second, **kwargs):
  print(first, second)
  for kwarg in kwargs.items():
    print(kwarg)
myfunction('세수하기','공부하기', c = '운동하기',d = '책읽기',e = '유튜브보기')


세수하기 공부하기
('c', '운동하기')
('d', '책읽기')
('e', '유튜브보기')

 

기존 함수에서는 keyword argument가 없지만 **kwargs를 통해 실제로는 마음대로 받을 수 있는 것이다.