KalelPark's LAB

[ CLEAN CODE ] Clean Python, *args, **kwargs? 본문

Python/CLEAN CODE

[ CLEAN CODE ] Clean Python, *args, **kwargs?

kalelpark 2023. 1. 25. 20:52

*args, **kwargs란?

       Python에서의 *, **는 주소값을 저장하는 의미가 아닙니다. 여러 개의 인수를 받을 때, 키워드 인수를 받을 때 사용하는 표시입니다. 

*args

       *args는 *arguments의 줄임말입니다. 즉, 다른 단어를 작성해도 상관없습니다.

       이 지시어는 여러 개(복수개)의 인자를 함수로 받고자 할 때 쓰입니다.

       *의 의미는 메모리 주소를 찾아서 값을 읽어준다는 의미이다. 

**kwargs

       kwargs는 keyword argument의 줄임말로 키워드를 제공합니다.

       **kwargs는 (키워드 = 특정 값) 형태로 함수를 호출할 수 있습니다. 즉, 딕셔너리 형태로 함수 내부로 전달됩니다.

class nerf:
    def __init__(self, purple = 5, role = 5):
        self.purple = purple
        self.role = role

def a_func(*args, **kwargs):
    print(args)
    print("--------")
    ttt = nerf(**kwargs)
    print(ttt.purple)
    print(ttt.role)
    
print("예제")
a_func(1, 2, 3, purple = 2, role = 3)

>> 예제
   (1, 2, 3)
   --------
   2
   3

결론

 

     *args 형식을 사용하면 key, value를 받는 형식을 제외한 모든 형식을 인자로 받는 것이 가능합니다.

     **kwargs를 사용하면 key, value를 받는 형식의 인자로 받을 수 있습니다.

     *args, **kwargs를 사용하면 어떤 형태의 인자든 허용가능합니다.

Comments