[Python] *args와 **kwargs

필승! 강화도에서 해병대 장교로 국방의 의무를 다하고, 현재는 대학원에서 인공지능을 공부하고 있는 규씨입니다.


단순히 읽고 이해하는 것만으로는 기억에 오래 남지 않는다는 것을 깨닫고, 공부한 내용을 정리하고 공유하면서 더 오래 기억하기 위해 블로그를 시작하게 되었습니다.


읽으시면서 틀리거나 제가 잘못 이해한 부분 지적해 주시면 정말 감사하겠습니다.  함께 배우고 성장하는 공간이 되기를 바랍니다. 감사합니다!


파이썬을 사용하다 보면 함수의 인자를 동적으로 처리해야 하는 상황을 종종 마주치게 됩니다. 이러한 상황에서 매우 유용하게 사용할 수 있는 기능이 바로 *args와 **kwargs입니다. 각각의 쓰임이 헷갈릴 때가 있어 포스팅을 하게 되었습니다.

 

*args

*args는 *arguments의 줄임말로 다른 단어를 사용해도 됩니다. (예를 들어 *name, *age 처럼이요.) *args는 함수에 전달되는 위치 인자들을 튜플(tuple) 형태로 함수 내부에서 사용할 수 있게 해줍니다. 인자의 수를 미리 알 수 없는 경우에 매우 유용합니다.

 

예시

def print_arguments(*args):
    for arg in args:
        print(arg)

print_arguments(1, 2, 3)
print_arguments('a', 'b', 'c', 'd')

위의 코드에서 print_arguments 함수는 몇 개의 인자가 전달되든지 간에 이를 모두 출력할 수 있습니다. *args를 사용함으로써 함수는 유연성을 갖게 됩니다.

 

주의사항 

*args는 함수 정의에서 위치 인자들이 모두 처리된 후에 사용됩니다. 따라서, *args는 함수 정의에서 마지막 위치 인자 다음에 와야 합니다.

def example_function(first, second, *args):
    print(f"first: {first}")
    print(f"second: {second}")
    print(f"args: {args}")

example_function(1, 2, 3, 4, 5)

이 예시에서 first와 second는 고정된 위치 인자이고, 3, 4, 5는 *args에 할당됩니다. 따라서, args는 (3, 4, 5)가 됩니다.

 

 

 

**kwargs

**kwargs는 **keyword arguments의 줄임말로 역시나 다른 단어를 사용해도 됩니다. **kwargs는 키워드 인자들을 딕셔너리(dictionary) 형태로 함수 내부에서 사용할 수 있게 해줍니다. 이 또한 인자의 수와 상관없이 유연하게 함수를 정의할 수 있는 방법입니다.

 

예시

def print_keyword_arguments(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_keyword_arguments(name='Alice', age=25)
print_keyword_arguments(a=1, b=2, c=3)

위의 코드에서 print_keyword_arguments 함수는 키워드 인자들을 받아 이를 출력합니다. **kwargs를 사용하면 키-값 쌍으로 전달된 인자들을 처리할 수 있습니다.

 

 

*args와 **kwargs 함께 사용하기

*args와 **kwargs를 함께 사용할 수도 있습니다. 이 경우, 위치 인자들이 먼저 처리되고 그 다음에 키워드 인자들이 처리됩니다.

 

예시

def print_all_arguments(*args, **kwargs):
    print("Positional arguments:")
    for arg in args:
        print(arg)
    print("\nKeyword arguments:")
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_all_arguments(1, 2, 3, name='Alice', age=25)

이 함수는 위치 인자와 키워드 인자 모두를 받아서 각각 출력합니다. *args와 **kwargs를 함께 사용함으로써 함수는 다양한 형태의 인자를 처리할 수 있게 됩니다.

 

 

결론

*args와 **kwargs는 파이썬에서 함수의 유연성을 높이기 위해 매우 유용하게 사용될 수 있는 기능입니다. 이 두 가지 기능을 잘 활용하면 함수의 인자를 보다 효율적으로 처리할 수 있으며, 코드의 재사용성과 가독성을 높일 수 있습니다.

 

 

'파이썬' 카테고리의 다른 글

내가 보려고 만드는 Conda 사용법  (0) 2024.08.08