본문 바로가기
Python

[Python] 파이썬 - 08. *args, **kwargs

by Hoody Coder 2023. 5. 7.

1. *args 

args 파이썬에서 가변 갯수의 인자를 받는 함수를 정의할 사용된다. *args를 사용하면 호출할 때 많은 인자들을 한 키워드에 담아 전달 할 수 있게되는것이다. 이렇게 전달된 인자들은 튜플 형태로 꺼내 쓸 수 있다.

def name(name1, name2, name3):
    print(name1, name2, name3)

name("홍길동", "허균", "허난설헌")    


def name(*args):
    print(*args)

name("홍길동", "허균", "허난설헌")
# 홍길동, 허균, 허난설헌

*args 사용하면 위처럼 많은 매개인자를 사용해야할때 한번에 줄일 있다.

간단히 두수를 받아 더하는 사칙연산코드를 작성해보자.

def plus(a, b):
    return a + b

두개의 매개인자가 필요하기 때문에 위와같이 작성하면 된다. 하지만 만약 더하는 매개인자를 정하지 않고 무조건 넣고 싶을때는 어떻게 해야할까? 변수를 a ~ z 까지 모두 입력하는 것은 비효율적일 것이다. 따라서 *args를 통해 계산해보자

def plus(a, b, *args):
    print(args)
    return a + b 


plus(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) # (3, 4, 5, 6, 7, 8, 9, 10)

*args로 입력한 매개인자들이 오류없이 print되는것을 볼 수 있다.

cf) *args에 대한 plus함수에 대한 값을 구하고 싶을때는 무턱대고 return에 + args를 하면 오류가 발생할 것이다.

이때는 for문을 통해서 답을 구해야 한다.

또한 *args가 아닌 *Num으로 입력해도 동일하게 적용된다.

아래와 같이 말이다.

def plus(a, b, *args):
    result = a + b
    for num in args:
        result += num
    print(result)    
    return result

plus(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) #55

 


2. **kwargs

**kwargs는 (키워드 = 값)의 형태로 함수를 호출하는것이 가능해진다.

파이썬의 여러가지 딕셔너리 형태로 매개인자를 받는 것이다.

이를 활용하면 이런식의 응용이 가능해진다.

def manyKwargs(**kwargs):
  if kwargs is not None:
    print (kwargs)

manyKwargs(name='Python', old='66', language='Computer') 
# {'name': 'Python', 'old' : '66', 'language' : 'Computer'}

또는 아래와 같은 활용이 가능하다.

def profile(**kwargs):
    for k, v in kwargs.items():
        print(k, v)

# 사용법1
profile(name='michael', country='korea', age='999')

# 사용법2
k = {
    'name': 'michael',
    'country': 'korea',
    'age': '999'
}


profile(**k)
"""
name michael
country korea
age 999
"""

 

 


3. *args와 **kwargs를 함께 사용하기

때로는 일반 인자와 키워드 인자를 동시

에 처리해야 하는 경우가 있습니다. 이럴 때는 *args와 **kwargs를 함께 사용할 수 있습니다. 다만, 이 두 매개변수의 순서에 주의해야 합니다. 일반적으로 *args가 먼저 오고 **kwargs가 뒤에 위치합니다.

예시를 살펴봅시다.

def combined_function(*args, **kwargs):
    print("일반 인자들:")
    for arg in args:
        print(arg)

    print("\n키워드 인자들:")
    for key, value in kwargs.items():
        print(f"{key}: {value}")

combined_function(1, 2, 3, name="홍길동", age=30, job="프로그래머")
"""
('apple', 'banana')
{'drink': 'coffee', 'dessert': 'icecream'}

"""

위의 예시에서, combined_function은 *args와 **kwargs를 동시에 사용하여 일반 인자들과 키워드 인자들을 모두 처리합니다. 함수를 호출할 때 전달된 인자들은 각각 튜플과 딕셔너리 형태로 저장되며, 이를 이용해 각각의 값을 출력합니다.

결론

*args **kwargs 파이썬에서 함수를 작성할 유연성을 높여주는 기능입니다. 이들을 이해하고 활용하면 여러 인자를 처리하는 함수를 간결하고 효과적으로 작성할 있습니다. 글을 통해 *args **kwargs 대한 이해가 더욱 향상되었기를 바랍니다. 행복한 코딩 되세요!

 

Index로 돌아가기