ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • parameter (또는 argument) 앞에 *, ** (아스테리크 = asterisk = 별표) 의미
    언어/파이썬 & 장고 2016. 6. 23. 18:47

    장고 orm이나 파이썬 코드를 보면 *args, **kwargs를 확인할 수 있습니다.

    해당 뜻은 어떤 파라미터를 몇개를 받을지 모르는 경우 사용한다 라고 하지만 막연하기 때문에 예를 들어 설명하겠습니다.

    *args 

     *args는 파라미터를 몇개를 받을지 모르는 경우 사용하고 튜플 형태로 전달됩니다.

     def test(*args):
        print(args)
    
    test('a','b','c')
    
    
    #결과 ('a', 'b', 'c')

    위처럼 argument로 여러 값을 던지고 해당 함수에서 tuple을 사용할 수 있습니다.


    dict타입과 같이 변수 자체를 그대로 넘기면 튜플 내에 데이터 1개로 취급됩니다.

    def test(*args):
        print(args)
    
    a = {'name': 'a', 'name2': 'b', 'name3': 'c'}
    test(a)
    
    
    #결과 ({'name3': 'c', 'name': 'a', 'name2': 'b'},)



    아래와 같이 dict 변수에 포인터를 붙여서 사용하면 dict 변수내의 키값만 빠져 튜플형태를 이루게 됩니다.

    def test(*kwargs):
        print(kwargs)
    
    a = {'name': 'a', 'name2': 'b', 'name3': 'c'}
    
    test(*a)
     
    #결과 ('name', 'name2', 'name3')


    **kwargs

    - 파라미터 명을 같이 보낼 수 있고 kwargs는 딕셔너리 형태로 전달됩니다.

    def test(**kwargs):
        print(kwargs)
    
    
    test(name1='a', name2='b', name3='c')
    
    
    #결과 {'name2': 'b', 'name3': 'c', 'name1': 'a'}


    만약 이미 dict 형태인 값을 가지고 있고, 해당 함수에 변수 자체를 넘기고 싶을 경우 아래와 같이 합니다.


    def test(**kwargs):
        print(kwargs)
    
    
    a = {'name': 'a', 'name2': 'b', 'name3': 'c'}
    
    test(**a)
    
    
    # 결과 {'name': 'a', 'name2': 'b', 'name3': 'c'}


    댓글