함수 인자에 [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]는 자주 사용된다.
'파이썬 > 파이썬 중급' 카테고리의 다른 글
[파이썬] 코드에서 커맨드 명령어를 실행 시키는 방법(with subprocess) 2편 (0) | 2023.02.08 |
---|---|
[python]multiprocessing Process 완벽 정리(초보자) (0) | 2023.01.26 |
[파이썬] argparse 란? | 사용법 (0) | 2022.08.29 |
[Python기초] 특정 폴더에 있는 파일명 추출 하는법 완벽정리 (1) | 2022.04.19 |
[파이썬 중급] getattr | setattr | delattr 은 무엇일까? (0) | 2021.10.14 |
댓글