• 2020. 6. 29.

    by. 윈썸지니

    반응형

    출처 : unsplash

    이번 포스팅은 함수 인자로 딕셔너리 자료형을 전달하는 방법에 대해 알아 봅니다.

    이전 포스팅 중 함수의 매개변수 이름으로 인자를 전달하는 방식에 대해 다룬 적이 있습니다.

     

    매개변수의 키워드를 주지 않으면 순서대로 인자가 전달됩니다.

    함수에 정의된 매개변수의 순서를 기억하고 있거나, 함수 사용시 다시 정의된 내용을 확인 후 인자를 전달해야 합니다.

    이방식이 불편한 점이 있어 키워드를 주면 순서에 상관없이 키 방식으로 인자 전달이 가능 함을 이전 포스팅에서 다루었습니다.

     

    먼저 다시 리마인드 차원에서 키워드 방식의 인자 전달 방법을 예제를 통해 알아봅니다.

    >>> def test( subject,  count, max, average ) :
        print( '과목: ', subject)
        print( '명수: ', count )
        print( '최고득점: ', max )
        print( '평균: ', average  )

    ## 순서에 따라 인자 전달하는 방식입니다.
    >>> test( '파이썬', 20, 98, 78 )
    과목:  파이썬
    명수:  20
    최고득점:  98
    평균:  78

    ## 순서에 상관없이  키로 인자를 전달합니다.
    >>> test( count=20, subject='파이썬',  average=78, max=99 )
    과목:  파이썬
    명수:  20
    최고득점:  99
    평균:  78
    >>>

    위의 방식을 딕셔너리로 정의하여 인자를 전달하는 방법이 있습니다.

    아래 예제 처럼 키와 값을 매핑하는 딕셔너리를 정의해서 인자로 전달합니다.

     

    그런데 그냥 전달하면 오류가 발생을 하고 **  를 덧붙여 전달해야 합니다.

    >>> x = { 'count':20, 'subject':'파이썬',  'average':78, 'max':99 }

    ## 그냥 x 로 전달하면 오류가 발생합니다.
    >>> test(x)
    Traceback (most recent call last):
      File "<pyshell#115>", line 1, in <module>
        test(x)
    TypeError: test() missing 3 required positional arguments: 'count', 'max', and 'average'
    >>> test( **x)
    과목:  파이썬
    명수:  20
    최고득점:  99
    평균:  78

    ## 딕셔너리 형식으로 바로 인자로 전달도 가능합니다.
    >>> test( **{ 'count':20, 'subject':'파이썬',  'average':78, 'max':99 } )
    과목:  파이썬
    명수:  20
    최고득점:  99
    평균:  78
    >>>

    함수 자체를 딕셔너리 방식으로 인자를 받을 수 있도록 정의 할 수도 있습니다.

    일전에 가변길이 인자를 받을 때 *매개변수로 정의 했던 내용을 기억하실 겁니다.

     

    이것과 비슷하게 **매개변수로 정의 합니다.

     

    예제를 통해 알아 봅니다.

    먼저 리마인드 차원에서 가변길이 예제 입니다.

    >>> def test( *args ):
        for x in args :
            print( x )

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

    딕셔너리 형식의 가변길이 함수 정의 예제입니다.

    키워드 방식도 딕셔너리를 이용하여 가변길이 인자를 전달 할 수 있습니다.

    >>> def test( **kwargs ) :
        for key, val in kwargs.items() :
            print( '%s: %s' % (key, val) )

    >>> x = { 'count':20, 'subject':'파이썬',  'average':78, 'max':99 }
    >>> test( **x )
    count: 20
    subject: 파이썬
    average: 78
    max: 99
    >>>

    오늘은 함수 인자를 키워드 방식의 가변길이로 전달하는 방법을 알아보았습니다.

    반응형