TIL - Python - 함수&return& 매개변수

김영훈·2021년 2월 23일
0

Python

목록 보기
6/14

# 함수(function)

  • 함수(function)의 의미

    파이썬에서 제공하는 기능으로 특정 용도의 코드를 한 곳에 모아 놓은 것을 뜻한다. 함수는 처음 한 번만 작성해 놓으면 필요할 때 계속 불러 쓸 수 있다.

  • 함수를 사용하는 이유

    • 함수의 장점은 코드의 재사용성을 높이는 데 있다. 개발자들이 코딩을 하면서 겪는 문제 중 하나가 프로그램 내에서 중복된 코드를 작성하는 것이라고 한다. 똑같은 코드의 작성이 반복되면 전체 코드의 길이가 길어질 뿐만 아니라, 입력 과정에서 실수가 발생하여 error의 원인이 되기도 한다. 함수는 이러한 불편함을 해소시켜준다. 중복된 코드를 줄여줌으로써 코드의 재사용성을 높여주고, 한 번의 함수 작성이 여러 번의 작업을 대신하게 되면서 프로그래밍에서 발생하는 실수를 줄일 수 있다.
  • 파이썬 함수의 구조

    def 함수명(매개변수1, 매개변수2, ...):
         <수행할 문장1>
         <수행할 문장2>`
         ...
    • def: 함수를 만들 때 사용하는 예약어. 'define'에서 따온 키워드
    • 매개변수(parameter): 함수를 통해 입력받은 인수(argument)가 저장되는 변수
    • 인수(argument): 함수를 호출할 때 넣는 값
  • 함수 호출

    • 함수 호출 방법은 간단하다. 함수 이름을 입력하고 그 뒤에 ()를 적어주면 된다.
    • 이러한 함수의 사용 방식을 다른 말로 "함수를 호출(call)한다" 라고 한다.
    • 함수 호출 순서: 함수의 호출은 반드시 함수가 생성된 후에 이뤄져야 한다. 만약 함수가 만들어지기 전에 함수 호출이 이뤄지면, "함수가 정의(define)되지 않음"을 이유로 error가 발생한다.

      함수 이름()

  • 예시

        def func_mul(x):             # 매개변수가 x인 함수 생성
            """                      # 함수에 docstring 입력
            자동 곱셈 함수
            """
            y1 = x * 100
            y2 = x * 100
            y3 = x * 100
            
            return y1, y2, y3        # return에 값을 지정함으로써 함수를 통해 반환되는 값을 지정
            
            a, b, c = func_mul(5)    # 인수(argument) 5를 입력하여 함수를 호출
                                     # 더불어, 호출된 함수가 반환하는 값을 변수 a, b, c에 할당(저장)

            print(a, b, c)
            
            print(func_mul.__doc__)  # 함수 이름.__doc__: 함수에 입력된 docstring 문자열에 접근해주는 메서드
            

# return

  • 위 예시의 경우처럼, 함수 안에 return을 사용하면 값을 함수 바깥으로 반환한다.(만약 return에 값을 지정하지 않으면 None을 반환) 하지만 값의 반환이 곧바로 출력으로 이어지는 것은 아니다. 값을 출력하려면 print()를 사용해야 한다.

  • 위 예시처럼, return을 통해 반환하는 값이 여러 개인 경우, 각각의 값은 tuple에 담겨 출력된다.

        def func_mul(x):
            y1 = x * 100
            y2 = x * 100
            y3 = x * 100
            
            return y1, y2, y3

        print(func_mul(5))       # 결괏값: (500, 500, 500)
  • return은 값을 반환하는 기능 이외에도 함수 중간에서 빠져나오는 기능을 한다.
        def func_mul(x):

            y1 = x * 100
            y2 = x * 100
            y3 = x * 100

            return
            if y1 == 500:
                print('y1의 값은 {}입니다.'.format(500))     
                # return으로 함수를 빠져나왔기 때문에, return 아래로 이어지는 print()는 실행x
                
        print(func_mul(5))      # 결괏값: None

# 매개변수

  • 매개변수 vs 인수

    • 매개변수(parameter): 함수를 통해 입력받은 인수(argument)가 저장되는 변수

    • 인수(argument): 함수를 호출할 전달하는 입력값

  • 매개변수가 없는 함수

    • 함수에 매개변수가 없다면, 인수 입력을 제외한 채 함수를 실행하면 된다.
        def say():
            print('Hello wordl!')
            
        a = say()      #  함수가 실행되며, 결괏값 None은 변수 a에 저장된다
    
  • 매개변수의 초깃값이 지정된 함수

    • 함수를 호출하려면 매개변수의 개수만큼 인수를 입력해야 한다. 만약 아래의 예시처럼 매개변수의 개수에 맞춰 인수를 전달하지 않으면 error가 발생한다.

      def example_mul(arg1, arg2):  #  매개 변수 2개
             for i in arg1, arg2:
             print(i)
             
       example_mul(10)   #  전달한 인수 1개
                         #  Error 발생 : TypeError: example_mul() missing 1 required positional argument: 'arg2' 
    • 하지만, 함수의 매개변수에 초깃값이 지정된 경우엔 인수 입력을 생략할 수 있다.

      def example_mul(arg1, arg2=20):  #  매개 변수 2개
             for i in arg1, arg2:
             print(i)
             
       example_mul(10)   #  전달한 인수 1개
                         #  정상적으로 실행된다.
    • 매개 변수의 초깃값 지정 시 주의 사항

      • 초깃값이 모든 변수에 지정되지 않은 경우라면, 초깃값이 설정되지 않은 매개변수가장 먼저 입력해야 한다.

      • 초깃값이 지정돼도 인수 입력을 통해 새롭게 값을 지정할 수 있다.

  • 가변 인수(variable argument) 함수 만들기(*매개변수)

    • 만약 함수의 입력값(인수의 입력값)이 몇 개가 될지 예측할 수 없는 경우엔 어떻게 해야 할까? 이러한 상황에선 가변 인수를 활용하면 된다. 가변 인수 함수인수 입력생략할 수도, 1개만 입력할 수도, 여러 개를 입력할 수도 있다.

    • 가변 인수 함수를 만들 때에는 *매개변수처럼 매개변수 앞에 *(애스터리스크) 를 붙여주면 된다.

    • 입력된 인수의 값은 각각 tuple에 담겨 출력된다

    • 주의 사항: 가변 인수와 고정 인수가 함께 사용될 경우, 고정 인수에 대응하는 매개변수를 가장 먼저 입력해야 한다.

        def example_mul(arg1, arg2, *args):      # '*매개변수' 형태로 입력하여 가변 인수 함수를 사용
            x = []
            for i in arg1, arg2, args:
               x.append(i)
            return x

        print(example_mul(10, 20, 'park', 'kim'))  #  고정 인수 'arg1', 'arg2'에 대한 값: 10, 20
                                                   #  가변 인수 '*args'에 대한 값: 'park', 'kim'
                                                   #  결괏값: [10, 20, ('park', 'kim')]
    
  • 키워드 인수를 사용하는 가변 인수(variable argument) 함수 만들기(**매개변수)

    • 키워드 인수를 사용하는 가변 인수 함수키워드=값형식으로 인수를 입력받는다.

    • 해당 가변 인수 함수를 만들려면 **매개변수처럼 매개변수 앞에 **를 붙여주면 된다.

    • 입력된 인수의 값은 각각 dict에 담겨 출력된다

    • 주의 사항: 가변 인수와 고정 인수가 함께 사용될 경우, 매개변수 순서에서 **kwargs는 반드시 가장 뒤쪽에 와야 한다.

       def example_mul(arg1, arg2, *args, **kwargs): # '**매개변수' 형태로 입력하여 키워드 인수를 사용하는 가변 인수 함수를 사용
           for i in arg1, arg2, args, kwargs:
               print(i, end=' ')

       example_mul(10, 20, 'park', 'kim', age1 = 24, age2 = 21)
       #  고정 인수 'arg1', 'arg2'에 대한 값: 10, 20
       #  가변 인수 '*args'에 대한 값: 'park', 'kim'
       #  가변 인수 '**kargs'에 대한 값: age1 = 24, age2 = 21
       #  결괏값: 10 20 ('park', 'kim') {'age1': 24, 'age2': 21} 
       
  • unpacking을 이용하여 인수 넣기

    • *(에스터리스크)는 매개변수 앞에 붙어서 가변 인수 함수를 생성하는 데 사용될 뿐만 아니라, 반복 가능한 객체(iterable)의 요소를 unpacking하여 함수의 인수로 입력할 때 사용되기도 한다.

    • unpacking이란??

      • 여러 요소를 포함하고 있는 하나의 객체를 여러 개의 변수에 나누어 담는 것
    • 기본적인 형식은 다음과 같다.

      함수 이름(*iterable 객체)

    • 예시

        def example_mul(arg1, arg2, *args):      
            x = []
            for i in arg1, arg2, args:
                x.append(i)
            return x

        a = [1, 3, 5, 6, 7, 8, 9]     #  인수로 입력할 요소로 구성된 list 객체이다.

        print(example_mul(*a))        #  '에스터리스크'를 활용하여 변수 a에 할당된 list 객체의 요소를 각각의 매개 변수에 나누어 담는다.
                                      #  결괏값: [1, 3, (5, 6, 7, 8, 9)]
profile
Difference & Repetition

0개의 댓글