[Python] *args, **kwargs

반응형
    반응형

    앞서 포스팅한 패킹과 언패킹의 연장선입니다. 

    언패킹을 할때 나머지 변수는 *rest 로 묶을 수 있었는데요.

    제가 변수로 정하고 싶지 않은 건 큰 관심이 없어서 변수지정을 안 주는데 갯수가 정해지지 않습니다. 

    갯수가 안 정해지지만 묶을 수 있는것과 마찬가지로

    함수의 파라미터에서 갯수를 정할 수 없는 경우가 있습니다.

     

    이런 맥락으로 파라미터의 갯수를 정할 수 없는 경우 *args, **kwargs로 표시할 수 있습니다.

    별 기호(*)가 중요한것이지 args는 바꿀 수 있습니다. 관용상 이렇게 쓰면 모두가 알 수 있기 때문에 쓰는 것뿐입니다.

     

     

    *args

    args는 arguments의 줄임말로 인수들이라는 뜻입니다. 

    단어의 뜻처럼 인수들을 넣으면 되는 것입니다.

    예제로 패킹과 언패킹에서 보인 정가 구하는 함수를 그대로 가져오겠습니다.

    이 함수에서 파라미터 변수 이름을 *args로 바꿨습니다.

     

    import numpy as np
    
    def list_price(rate,*args):
        cal = (1+rate)*np.array(args)
        return list(cal)
        
    list_price(0.15,1000,2000,3000,4000)

     

    1000부터 4000까지는 필수 변수가 아니고 *args에 소속된 변수들입니다. 

    원하는만큼 늘려서 쓸 수 있습니다.

    변수에 끝을 정할 수 없기 때문에함수에 *args를 넣고 싶다면 파라미터 설정할 때

    맨 뒤에 해야만 오류없이 함수가 완성됩니다.

     

     

     

    **kwargs

    kwargs는 keyword arguments에 줄임말고 키워드 인수라는 뜻인데

    '키워드=인수'로 형태로 입력하면 딕셔너리로 출력하게 됩니다.

     

    def item_list(**kwargs):
        return kwargs
        
    item_list(item1='사과',item2='수박')

     

    위와 같이 kwargs를 return하면 딕셔너리로 나오게 됩니다.

     

     

    *args와 **kwargs 같이 쓰기

    *args와 **kwargs를 같이 쓰고 싶다면 *args를 **kwargs 앞에 둡니다.

    방금 만든 정가 리스트를 목록 정리를 해보겠습니다.

    참고로 *args, **kwargs를 써보기 위해 하는 예제라서 효율적인 함수는 아닙니다.

     

    def list_price(rate,*args,**kwargs):
        arrange = {}
        cal = list((1+rate)*np.array(args))
        for index in range(len(cal)):
            key = list(kwargs.keys())
            value = list(kwargs.values())
            arrange[key[index]] = (value[index],cal[index])
        return arrange
        
    list_price(0.15,1000,2000,3000,4000,item1='사과',item2='수박',item3='딸기',item4='참외')

     

    이런 식으로 *args와 **kwargs를 사용해서 함수를 만들 수 있습니다.

     

     

     

    관련 포스팅

    [Python/기초] - [Python] 패킹과 언패킹

     

    'Python > 기초' 카테고리의 다른 글

    pip 직접설치하기  (0) 2021.08.29
    [Python] Generator(제너레이터)  (0) 2021.08.09
    [Python] 패킹과 언패킹  (6) 2021.08.02
    [Python] 튜플 정렬하기  (2) 2021.07.17
    [업무자동화] 작업스케쥴러 작업이름 바꾸기  (0) 2021.07.16

    댓글

    Designed by JB FACTORY

    ....