[python] *args와 **kwargs에대해

김동욱·2023년 4월 25일

python

목록 보기
2/6
post-thumbnail

*args와 **kwargs는 파이썬에서 매우 유용한 기능 중 하나이다. *args와 **kwargs는 함수를 정의 할 때 사용된다. 이 두 매개변수(parameter)는 함수를 호출하여 여러 개의 인자(argument)를 전달할 때 사용된다. 이번 글에서는 *args와 **kwargs가 무엇인지, 어떻게 사용하는지, 그리고 실제로 어떻게 활용되는지에 대해 자세히 알아보겠다.

*args란?

*args는 가변 인자를 의미한다. 보통 함수에 전달되는 인자의 개수가 일정하지 않은 경우 사용된다. 함수를 정의할 때, 인자 목록에서 매개변수 이름 앞에 * 를 붙이면 된다. 이렇게 하면 함수가 호출될 때, 매개변수로 전달된 모든 인자가 튜플 형태로 *args 매개변수에 저장된다.

*args 사용 예시

def example1(array):
    for element in array:
        print(element)
        
def example2(*args):
    for arg in args:
        print(arg)

*args 사용법을 살펴보기 위해 두 가지 메서드를 선언했다. 두 메서드는 같은 기능을 수행한다. 다만 메서드를 호출하는 방법에 차이가 존재한다.

example1 메서드를 호출하는 방법과 메서드 출력 결과는 다음과 같다.

example2([1,2,3,4])

# 출력 결과
#        1
#        2
#        3
#        4

메서드를 호출할 때 인자로 리스트를 넘겼을 때, 매개변수로 전달 받은 리스트의 요소를 하나씩 출력하는 것을 볼 수 있다.

여기서 메서드를 호출할 때, 인자로 리스트가 아닌 모든 값을 일일히 나열하는 방식으로 전달 할 수도 있는데, 이는 example2에 대한 설명이다. example2은 다음과 같이 호출한다.

example2(1,2,3,4)

# 출력 결과
#        1
#        2
#        3
#        4

example1을 호출할 때와 다르게 인자로 여러가지 값을 전달하고 처리하는 것을 볼 수 있다. *args를 사용하면 전달되는 인자의 개수가 달라지더라도 그것을 유연하게 처리할 수 있다.

**kwargs란?

**kwargs는 키워드 가변 인자를 의미한다. 함수가 호출될 때 여러 개의 키워드 인자(keyword argument)를 받을 수 있는 기능을 제공한다. 함수를 정의할 때, 인자 목록에서 매개변수 이름 앞에 ** 를 붙이면 된다. 이렇게 하면 함수가 호출될 때, 매개변수로 전달된 모든 키워드 인자가 딕셔너리 형태로 **kwargs 매개변수에 저장된다.

여기서 키워드 인자란 name='John', age=30, city='New York'와 같이 인자의 값이 key값과 value값으로 구분되어 있는 경우를 의미한다. 이 때, key값에 해당하는 name, age, city가 변수명과 같은 역할을 담당하며, value는 그 변수의 값에 해당한다고 이해하면 된다.

**kwargs 사용 예시

def example(**kwargs):
    for key, value in kwargs.items():
        print(key, value)

이 함수는 전달된 키워드 인자를 모두 출력한다. 예를 들어, 다음과 같이 함수를 호출할 수 있다.

example(name='John', age=30, city='New York')

# 출력 결과
#        name = John
#        age = 30
#        city = New York

*args와 마찬가지로 전달되는 키워드 인자의 개수가 바뀌거나, 그 내부의 key 혹은 value값이 변경되는 경우에도 **kwargs는 이를 유연하게 처리할 수 있다.

profile
안녕하세요! 질문과 피드백은 언제든지 환영입니다:)

0개의 댓글