• 2020. 6. 28.

    by. 윈썸지니

    반응형

    출처 : unsplash

    지난 포스팅은 파이썬 사용자 정의 함수 만드는 기본 방법을 알아 보았습니다.

    이번 포스팅은 함수 정의시 매개변수, 리턴 값 등에 대한 내용을 다루려고 합니다.

     

    함수 매개변수 정의 방법?

     

    함수는 매개변수가 없을 수도 있고 여러 개 있을 수도 있습니다.

    매개변수가 없는 것은 이전 포스팅에서 다루었고 매개변수가 1개 이상 있는 함수를 다루려고 합니다.

     

    예를 들어 설명합니다.

    인자로 전달되는 값을 매개변수가 x 가 받아서 출력하는 함수입니다.

    ## 출력함수를 정의 합니다.
    >>> def in_print( x ) :
        print( x )

     ## 아래 예제 들은 자료형에 상관없이 매개변수에 전달되는 자료형을 파이썬이 알아서 자료형을 인지하고 받아들입니다.
    ## 숫자형 인자를 전달합니다.
    >>> in_print( 1 )
    1

    ## 문자열 인자를 전달합니다.
    >>> in_print( "abcd" )
    abcd

    ## 자료형 인자를 전달합니다.
    >>> in_print( [ 1, 2, 3, 4])
    [1, 2, 3, 4]
    >>>

    ## 튜플형 인자를 전달합니다.
    >>> in_print( [('a', 1), ('b',2)])
    [('a', 1), ('b', 2)]

    ## 매개변수의 개수가 다를때를 오류가 발생합니다.
    >>> in_print( 1, 2 )
    Traceback (most recent call last):
      File "<pyshell#13>", line 1, in <module>
        in_print( 1, 2 )
    TypeError: in_print() takes 1 positional argument but 2 were given
    >>>

     

    ● 함수 매개변수 여러 개 정의

     

    입력 값이 여러 개 일 때는 콤마 구분자를 사용합니다.

    예제를 통해 알아봅니다.

    ## 입력 받은 3개의 매개변수를 합하는 함수입니다.
    >>> def user_sum( x, y, z ) :
    return x + y + z

    ## 인수는 순서대로 전달이 됩니다. 1 -> x, 2-> y, 3 -> z 로 전달됩니다.
    >>> print( user_sum( 1, 2, 3 ) )
    6
    >>> print( user_sum( 3, 4, 5 ))
    12

    ## 파이썬이 매개변수를 받을 땐 자료형을 알아서 받아주지만 return  x + y + z  에서 숫자와 문자를 더 할 수 없어서 오류가 발생합니다.
    >>> print( user_sum( 1, ‘a’, 4 ))
    Traceback (most recent call last):
      File “<pyshell#23>”, line 1, in <module>
        print( user_sum( 1, ‘a’, 4 ))
      File “<pyshell#20>”, line 2, in user_sum
        return x + y + z
    TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’
    >>> 

    ## 인수의 개수가 달라도 오류가 발생합니다.
    >>> print( user_sum( 1, 2 ) )
    Traceback (most recent call last):
      File "<pyshell#26>", line 1, in <module>
        print( user_sum( 1, 2 ) )
    TypeError: user_sum() missing 1 required positional argument: 'z'

    ● 함수 매개변수의 이름을 지정하여 호출

     

    함수를 호출시 순서가 틀려도 매개변수 이름을 지정하여 호출할 수 있습니다.

    예제를 통해 알아봅니다.

    ##  함수를 정의 합니다.
    >>> def subtraction( x, y ):
    return x - y

    ## 5 -> x, 3 -> y에 전달되어 5 -3의 결과가 나옵니다.
    >>> a = subtraction( 5, 3)
    >>> print(a)
    2

    ## x->3, y -> 5 이므로 3 -5 의 결과가 나옵니다.
    >>> a = subtraction( y=5, x=3)
    >>> print(a)
    -2

    즉 매개변수명이 지정이 되면 지정 된 대로, 지정이 안되면 순서대로 전달됩니다.

     

    함수 매개변수의 개수를 가변으로 하고 싶을 경우

     

    함수정의시 같은 기능을 하지만 함수 호출 시 마다 인수의 개수가 달라질 경우 이때마다 함수를 정의해서 사용하는 것이 아니고, 가변의 매개변수를 정의 할 수 있습니다. 매개변수명 앞에 ‘*’를 사용합니다.

    예제를 통해 알아 봅니다.

    ##  가장  큰 값을 구하는 함수를 정의합니다.
    >>> def max( *args ) :
        ret = args[0]
        for x in args:
            if x > ret : ret = x
        return ret

    >>> print( max( 1,4, 6, 3, 8 ) )
    8
    >>> print( max( 9, -10, -4, 3, 5, 0, 1 ))
    9
    >>> print( max( 1) )
    1
    >>> print( max( 1, 6))
    6
    >>> print( max( 'c', 'a', 'b' ))
    c
    >>> 

    매개변수가 어떻게 전달되는지 궁금하여 함수안에 print 를 코딩하여 출력해 보았습니다.

    아래 예제를 보면 튜플 형식으로 전달이 됩니다.

    >>> def max( *args ) :
        print( args )
        ret = args[0]
        for x in args:
            if x > ret : ret = x
        return ret

    >>> max( 1,4, 6, 3, 8 )
    (1, 4, 6, 3, 8)
    8
    >>> max( 9, -10, -4, 3, 5, 0, 1 )
    (9, -10, -4, 3, 5, 0, 1)
    9
    >>> max( 'c', 'a', 'b' )
    ('c', 'a', 'b')
    'c'
    >>> 

    함수의 매개변수 디폴트값(초기값) 설정 방법

    파이썬의 내장 함수를 사용하다 보면 실제 정의되어 있는 매개변수는 있는데 인자로 전달하지 않아도 되는 값들이 있습니다.

     

    또한 이 매개변수들은 기본 설정 값이 있어서 인자로 전달하지 않으면 기본 설정 값이 사용되어집니다.

    함수 정의 방법은 아래 예제를 통해 알아봅니다.

     

    마지막 매개변수인 option True이거나 값이 없으면 곱하기를 False 이면 나누기를 하는 함수 입니다.

    >>> def  calculate( x, y, option=True ) :
        if option :  ret = x * y
        else : ret = x/y
        return ret

    >>> calculate( 8 ,4, True )
    32

    ## 값이 없어서 초기값이 True가 되어 곱하기를 합니다.
    >>> calculate( 8 ,4 )
    32

    ##  나누기를 합니다.
    >>> calculate( 8 ,4, False )
    2.0
    >>> 

    함수의 매개변수 설정하는 방법들에 대해 알아보았습니다.

     

    다음 포스팅은 함수의 결과값을 전달하는 return에 대해 알아봅니다.

    반응형