728x90
C언어를 배우신 분이라면 *을 보고 당황할 수 있다. C언어의 포인터가 생각나기 때문이다.
다행(?)이지만 파이썬에는 포인터가 존재하지 않는다. 그렇다면 *args, **kwargs가 무엇인지 알아보도록 하자.
*args란?
args는 arguments의 약자이고 *은 가변 인자를 표현하는 문자이다. (args 이름을 사용하지 않아도 된다)
함수를 구현하다 보면 고정된 개수의 인자가 아닌 경우가 존재한다. 이럴 때 유용하게 사용할 수 있다.
# 두 개의 인자 덧셈
def add(a, b):
return a + b
# 여러 개의 인자 덧셈
def add(*args):
total = 0
for num in args:
total += num
return total
print(add(1, 2, 3, 4, 5)) # 15
가변 인자가 다른 인자와 함께 사용되는 경우도 존재한다. 아래 예시에서 mul에는 10이 들어가고 *args에 1, 2, 3, 4, 5 값이 들어간다. 가변 인자 뒤에 다른 인자가 오는 경우 에러가 발생한다. 가변 인자는 몇 개의 인자가 들어올지 모르기 때문에 뒤에 인자가 올 수 없다. 참고로 가변 인자의 타입은 튜플이다.
# 다른 인자와 함께 가변 인자 사용
def add(mul, *args):
total = 0
for num in args:
total += num
return total * mul
print(add(10, 1, 2, 3, 4, 5)) # 150
**kwargs란?
kwargs는 keyword arguments의 약자이다. 이름에서도 알 수 있듯이 딕셔너리 형태로 값을 저장한다. 함수에서 인자가 너무 많은 경우 kwargs를 사용하면 코드를 깔끔하게 구현할 수 있다. 하지만, 함수 내부에서는 **kwargs에 어떤 값이 들어오는지 알고 있다고 가정하고 코드를 구현하기 때문에 남들이 봤을 때는 오히려 코드를 해석하기 더 어려울 수 있다. (대부분의 사람들은 인자가 4개 이상이면 많다고 생각한다)
def info(**kwargs):
for name in kwargs:
print('이름: ', name)
print('취미: ', kwargs[name])
info(장민지='피아노')
"""
이름 : 장민지
취미 : 피아노
"""
감사합니다 !
728x90
'Language > Python' 카테고리의 다른 글
[Python] Decimal이란 (0) | 2023.07.09 |
---|---|
[ Python ] 점프 투 파이썬 전면 개정 2판 서평 (0) | 2023.07.01 |
[Python] mac 경로 설정 (7) | 2022.01.14 |
Garbage Collection (2) | 2020.12.12 |
Python의 장점과 단점 (0) | 2020.12.12 |