Language/Python

[Python] *args, **kwargs

12.tka 2022. 7. 3. 16:50
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