ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 함수의 가변인자 *(Asterisk)의 의미
    Computer Language/Python 2020. 11. 28. 16:53
    728x90

    python에서 *하나붙은 argument는 함수 호출 시 argument의 개수를 가변적으로 입력할 수 있습니다.

    def test(\*arg):  
        for data in arg:  
            print(data)

    이렇게 함수를 선언하고 아래와 같이 두가지 형태로 함수를 호출해봅시다.

    test(1,2,3)
    test( (1,2), (1,2), (2,1), (2,2) )

    결과는 아래와 같이 가변변수 값으로 그대로 출력됩니다.

    >>> test(1,2,3)
    1
    2
    3
    >>> test( (1,2), (1,2), (2,1), (2,2) )
    (1, 2)
    (1, 2)
    (2, 1)
    (2, 2)

    **karg는 어떻게 다를까?

    *이 두개 붙은 키형 가변변수는 보통 key와 값으로 선언됩니다.

    def test2(\*\*karg):  
        for key, value in karg.items():  
            print('key : %s, value : %s' % (key, value))

    함수를 호출할때는 아래와 같이 key=value 형식으로 argument를 넣어줍니다.
    test2(a=1, b=2)

    어라? 어디서 많이 본듯한 유형인데..

    바로 dict랑 구조가 비슷합니다. 다양한 형태의 dict자료형을 함수내에서 template화해서 처리 가능할 것 같습니다.
    test해봅시다. dictionary 자료형을 두가지 형태로 만듭니다.

    data1 = {
    'a':1,
    'b':2,
    'c':3
    }

    data2 = {
    'a':1,
    'b':(1,2),
    'c':{ 'sub1':1, 'sub2':2 }
    }

    함수를 호출할때는 앞에 **를 꼭 붙여줘야 합니다.

    >>> test2(**data1)
    key : a, value : 1
    key : b, value : 2
    key : c, value : 3
    
    >>> test2(**data2)
    key : a, value : 1
    key : b, value : (1, 2)
    key : c, value : {'sub1': 1, 'sub2': 2}

    두번째 유형이 어디서 많이 본거죠? 네 맞습니다. json형태입니다.
    json형태의 data를 다룰때 가변변수를 사용해서 template화 된 함수를 구현할 수 있습니다.

    참고로 Key형 가변변수는 Pyhon3에서만 지원합니다.

    'Computer Language > Python' 카테고리의 다른 글

    reduce 활용법  (0) 2020.12.02
    map 활용법 (숫자 list를 문자열로 변환)  (0) 2020.12.02
    시간 함수 datetime  (0) 2020.11.29

    댓글

Designed by black7375.