[Pytorch]args, kwargs

ma-kjh·2024년 12월 23일
0

Pytorch

목록 보기
25/25

파이썬에서 argskwwargs는 함수를 정의할 때 가변 인자(Variable-length arguments)를 받아들이기 위한 문법적 장치.


1. args (가변 위치 인자)

  • 여러 개의 위치 기반 인자튜플 형태로 전달받는다.
  • 함수나 메서드를 호출할 때, 인자의 개수가 가변적일 수 있도록 유연성을 제공.
def example_func(*args):
    for i, arg in enumerate(args):
        print(f"args[{i}] = {arg}")

example_func(1, "hello", 3.14)
# args[0] = 1
# args[1] = hello
# args[2] = 3.14

2. kwargs (가변 키워드 인자)

  • 여러 개의 키워드 기반 인자딕셔너리 형태로 전달받는다.
  • 딕셔너리의 키(문자열)는 해당 인수의 변수 이름이 되고, 값이 인수 값으로 할당됨.
def example_func(**kwargs):
    for key, value in kwargs.items():
        print(f"{key} = {value}")

example_func(name="Alice", age=30, job="Engineer")
# name = Alice
# age = 30
# job = Engineer

3. 클래스 __init__에서 사용되는 이유

(1) 상위 클래스(부모 클래스)와 호환성

  • 상속을 사용할 때, 부모 클래스의 __init__ 메서드가 받는 인자 형태를 그대로 자식 클래스에서도 받고 싶을 수 있음.
  • 이때 자식 클래스의 __init__에서 *args, **kwargs를 통해 모든 인자를 받아 두었다가, 부모 클래스의 __init__에 넘길 수 있음.
class Parent:
    def __init__(self, x, y, **kwargs):
        self.x = x
        self.y = y

class Child(Parent):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # Child-specific initialization

(2) 유연성

  • 클래스나 함수가 받을 매개변수의 수나 종류가 자주 변할 수 있는 상황에서, *args, **kwargs는 코드를 자주 수정할 필요 없이 유연하게 대응할 수 있다.

4. 요약

  • *args: 여러 개의 위치 인자를 하나의 튜플로 받아옴.
  • **kwargs: 여러 개의 키워드 인자를 하나의 딕셔너리로 받아옴.
  • 클래스의 __init__에서 *args**kwargs를 사용하는 주된 이유는 상속 구조에서 인자를 유연하게 전달하기 위함이며, 다양한 함수 시그니처(매개변수 형태)에 대응하기 위한 편의성도 제공.
profile
거인의 어깨에 올라서서 더 넓은 세상을 바라보라 - 아이작 뉴턴

0개의 댓글