무효 클릭 IP 추적 중...
파이썬/파이썬 중급

함수에있는 **kwargs는 뭘까?

꼬예 2023. 1. 16.

**kwargs 사용 예시

함수 인자에 [ic]**kwargs[/ic]가 들어간걸 자주 본 적 있을 거다.

조금 불편하게(?) 생긴 이 녀석을 왜 쓰는지 알아보자.

 

 

이 글을 읽기 전 선수 지식 포스팅

컨셉 이해

def test(num, **kwargs):
    print(num)
    print(kwargs)

test(1, num2=3)
#output
'''
1
{'num2': 3}
'''

[ic]**kwargs[/ic]에 넣어준 keyword argument값이 딕셔너리 형태로 출력된다.

 

주의할 점

1) keyword argument 만 받아야 한다.

test(1, 3)
#output
'''
TypeError: test() takes 1 positional argument but 2 were given
'''

[ic]kwargs[/ic]자리에 positional argument를 넣으면 에러가 발생한다.

 

2) 제일 마지막 위치에 와야 한다.

def test(num, **kwargs, num2):
    print(num)
    print(num2)
    print(kwargs)
#output       
'''                     
SyntaxError: invalid syntax
'''

예시처럼 중간에 올 수 없다.

반드시 제일 뒤에 위치해야 한다.

 

규칙도 많고, 코드 분석도 힘든 이 친구를 왜 쓸까?

 

결론부터 말하면 코드가 간결해진다.

인자를 많이 받을 경우 함수가 너무 길어지는 문제가 발생한다.

 

실제 사용 예시를 통해 이해해 보자.

 

실제 사용 예시

class MyModel:
    def train(self, **kwargs):

        learning_rate = kwargs.get('learning_rate', 0.001)
        num_epochs = kwargs.get('num_epochs', 10)
        batch_size = kwargs.get('batch_size', 32)
        
        # Use the kwargs to train the model
        print(f'Training with learning rate {learning_rate}, number of epochs {num_epochs} and batch size {batch_size}')

model.train(learning_rate=0.01, num_epochs=20, batch_size=64)
#output
'''
Training with learning rate 0.01, number of epochs 20 and batch size 64
'''

[ic]kwargs.get()[/ic]를 통해 원하는 값을 읽어 올 수 있다. 

이때 두 번째 인자 값을 넣어주면 값이 none일 때 디폴트 값으로 활용 가능하다.

 

예제를 통해 알아보자.

model.train(num_epochs=20, batch_size=64)
#output
'''
Training with learning rate 0.001, number of epochs 20 and batch size 64
'''

함수를 실행할 때  [ic]learning_rate[/ic]값을 인자로 넣지 않았다.

 

그런데도 에러가 발생하지 않는다. 뭘까?

바로 default로 지정해준 값이 있기 때문이다.

 

output을 보면[ic]learning_rate[/ic]의 값이 0.001로 출력되었다.

디폴트 사용예시

이는 디폴트 값을 사용한 것이다.

 

이처럼 발생가능한 에러를 줄여주고 코드 가독성을 올려준다는 점에서 [ic]**kwargs[/ic]는 자주 사용된다.

 

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글