티스토리 뷰

파이썬에서의 *args와 **kwargs의 개념과 예제에 대해 알아보고자 한다.

<목차>
 - *args
 - **kwargs
 - *args와 **kwargs 같이 사용       
 - *args와 **kwargs를 같이 사용 시 주의점 
 - default 값을 넣고 싶을 경우

*args: (positional) arguments를 묶어서 튜플 형태로 전달

개수가 정해지지 않은 다수의 인자묶어서 한 개의 튜플 자료형을 전달하는 것

 

예를 들어, 여러 개의 정수들을 모두 더하는 함수를 만들자고 하자.

def func_sum(n1,n2,n3):
    return n1+n2+n3

func_sum(1,2,3)
func_sum(10,20,30)

 

위 코드는 항상 세개의 수만 받아 그 합을 계산해준다. 

근데 만약 세 개가 아닌, n개의 인자 (예. 10개든 100개든)를 받을 경우에는 위처럼 정의해서는 안된다.

 

그럼 positional argument의 개수를 정할 수 없을 때, *args 를 사용한다.

 

아래 코드는 n개의 인자를 받아 합을 계산할 수 있다. 

def func_sum(*args):
    print(args)   # (1, 2, 3)
                  # (1, 2, 3, 4, 5)
func_sum(1,2,3) 
func_sum(1,2,3,4,5)
l =[1,2,3]

def func_sum(*args):
    print(args) # (1, 2, 3)

func_sum(*l)

**kwargs: keyword arguments를 묶어서 딕셔너리 형태로 전달

개수가 정해지지 않은 여러 개의 키워드 인자를 모두 묶어서 한개의 딕셔너리 자료형을 전달하는 것

 

예를 들어, 다음 코드는 여러 개의 n개의 키워드 인자를 받아 합을 계산할 수 있다. 

def func(**kwargs):
    print(kwargs) # {'a': 1, 'b': 2, 'c': 3}
    return sum(kwargs.values())
func(a=1, b=2, c=3)
d = {'a':1, 'b':2, 'c':3}

def func(**kwargs):
    print(kwargs) # {'a': 1, 'b': 2, 'c': 3}
    return sum(kwargs.values())

func(**d)

 

class에서 **kwargs를 활용한 예제는 다음과 같다.

class A:
    def __init__(self, **kwargs):
        self.name = kwargs.get('name')
        self.age = kwargs.get('age')
        self.date = kwargs.get('date')

    def print_A(self,):
        print(f"name: {self.name}")
        print(f"age: {self.age}")
        print(f"date: {self.date}")

A_list= profile_list = {
        "name": "해리포터",
        "age": "17",
        "date": "930101"}

A(**A_list).print_A()

*args와 **kwargs를 같이 사용

*args: 연속되는 positional argument

**kwargs: 연속되는 keyword argument

 

다음과 같이 *args와 **kwargs를 같이 사용할 수 있다.

def func(*args, **kwargs):
    print(args) # (1, 2, 3)
    print(kwargs) # {'a': 10, 'b': 20, 'c': 30}

func(1,2,3, a=10, b=20, c=30)
l =[1,2,3]
d = {'a':10, 'b':20, 'c':30}

def func_sum(*args, **kwargs):
    print(args) # (1, 2, 3)
    print(kwargs) # {'a': 10, 'b': 20, 'c': 30}

func_sum(*l,**d)

 

keyword argument가 나오기 전까지는 args 가 튜플로 먹고,

뒤 이어오는 keyword argument 는 kwargs 가 딕셔너리로 먹는다.


< *args와 **kwargs를 같이 사용 시 주의점>

*args와 **kwargs 순으로 작성해야한다.

그러나, *args와 **kwargs 순서를 바꿔쓰면 syntax error가 난다.

 

 

< default 값을 넣고 싶을 경우>

default 값을 가지는 keyword argument를 넣고 싶다면,

*args와 **kwargs 사이에 default 값을 넣어줘야한다.

def func(*args, i=100, j=200, **kwargs):
    print(args) # (1, 2, 3)
    print(i)  # 100
    print(j)  # 200
    print(kwargs) # {'a': 10, 'b': 20, 'c': 30}

func(1,2,3, a=10, b=20, c=30)

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함