ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 함수1- 함수 기초
    Python 2022. 2. 16. 12:57

    * 바로 쓰는 파이썬, 박진수, 서울대학교출판문화원

     

    앞선 포스트에서 파이썬 함수에는 빌트인 함수와 사용자 함수로 크게 나누어진다고 정리했었습니다. 그런데 함수에 대해 더 알고싶어 공부해보니 종류가 훨씬 많더라구요 ^^; 그래서 이번 포스트부터는 함수에 대해 더 자세하게 공부해보려 합니다. 공부한 책은 <바로 쓰는 파이썬>이란 책으로, 서울대학교에서 쓰이는 책이라고 합니다 wow~

     

    1. 함수의 기본 생김새

    함수의 기본 생김새는 다음 그림과 같습니다. 

     매개변수와 전달인자를 가진 함수의 가장 기본적인 모양입니다. def 옆 함수 이름, 괄호 안 parameter(매개변수), 그리고 실제 함수 사용 시 함수 옆 괄호에 전달인자(argument)가 있는 것을 확인할 수 있습니다. 또한 이 함수는 함수의 결괏값을 반환해주는 'return 객체'가 없는 함수이기도 합니다.

    매개변수(parameter) 전달인자를 참조하는 변수
    전달인자를 함수 내부에서 처리하기 위해 사용하는 식별자
    전달인자(argument) 함수를 호출할 때 넣어주는 값

    책에서 정의하는 매개변수와 전달인자의 뜻풀이입니다. 어려워요 @_@ㅋㅋㅋ

    대충 함수 정의 시 쓰이는 건 매개변수, 함수 사용 시 쓰이는 건 전달인자라 이해했습니다.

     

     

    매개변수가 없는 함수는 코드로 작성 시 다음과 같은 형태를 띱니다. 함수 이름 옆 괄호에 아무것도 없는 것을 확인할 수 있습니다. 

    1
    2
    3
    4
    5
    6
    7
    # 매개변수(parameter)가 없는 함수
    def say_hello():
        print('안녕~')
     
    # 실행 시
    say_hello()
    # 안녕~ 이 출력됩니다.  
    cs

     

    매개변수를 사용하는 함수를 일반화(generalization)할 수도 있습니다. 매번 일일이 함수를 만들어야 하는 고통을 줄여줍니다. 

    1
    2
    3
    4
    5
    6
    7
    8
    def hi():
        print('안녕하세요 선생님!')
    def john():
        print('제 이름은 John입니다')
    def emily():
        print('제 이름은 Emily입니다')
    def amy():
        print('제 이름은 Amy입니다')
    cs

    딱 보아도 궁극의 비효율임은 물론 뭔가 하나로 합칠 수 있지 않을까란 궁리가 가능해지는 함수들입니다. 보면 이름들만 달라지고 있습니다. 함수에 이름을 입력(즉, 이름을 전달인자로 하면)하면 이름을 받는 매개변수를 사용해 함수들을 일반화할 수 있습니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def hi():
        print('안녕하세요 선생님!')
     
     
    def person(name):
        print('제 이름은 {}입니다'.format(name))
     
    hi() # 안녕하세요 선생님!
    person('John'# 제 이름은 John입니다
    person('Emily'# 제 이름은 Emily입니다
    person('Amy'# 제 이름은 Amy입니다
    cs

    전달인자의 값으로 서로 다른 이름을 넣는 person()함수로 일반화하였습니다. person()함수의 작동 순서는 다음과 같습니다.

    1. 전달인자로 이름 전달

    2. 전달인자를 name 매개변수에 저장 

    3. 문자열 메소드 format()을 사용하여 매개변수 name 값 출력 

     

     

    2. 함수 호출(function call), 함수 반환(function return)

    함수 호출이란 함수를 사용하기 위해 함수를 불러오는 것입니다. 함수가 호출되면 파이썬이 해당 함수 코드로 건너가 함수 안의 명령문을 실행합니다...라고 책에는 나와있는데 그냥 함수 타자로 치고 함수가 작동된다 정도로 이해하면 될 듯 합니다.

    함수 명령문 실행을 마치면 함수를 호출한 명령문으로 다시 돌아옵니다. 이를 함수 반환이라 부릅니다. 만일 결괏값을 return으로 변환하는 함수라면 결괏값 호출까지 마치고 호출한 명령문 다음으로 돌아갑니다. 그러나 return이 없는 함수라면 결괏값 반환 없이 실행 종료 후 호출 명령문으로 돌아갑니다. 어렵네요!

    무튼 함수호출은 전달인자 유무/결괏값 유무에 따라 4가지로 나누어 볼 수 있습니다. 다음 표와 같습니다.

     

     

     

    3. 중첩함수(nested function), 재귀함수(recursion function)

    중첩함수란 함수 호출 시 함수 반환 값을 다른 함수의 전달인자로 사용하는 것을 말합니다. 즉 중첩함수는 아래 그림처럼 차례로 함수1의 값을 함수2에, 그리고 최종적으로 함수N을 호출한 명령문으로 결괏값을 반환하는 함수입니다.

     

    1
    2
    3
    price = 100
    print('총 금액은'+str(round(price*1.1))+'입니다.'
    #총 금액은 110입니다.
    cs

    위 코드에서 쓰인 함수는 총 3개입니다. round(), str(), 그리고 print()가 쓰였습니다. price라는 변수에 저장된 100은 일단 *1.1이 곱해진 후, round()의 인자로 들어갑니다. round()에서 처리된 결과는 다시 str()의 인자로 들어가며, 최종적으로 print()함수를 거쳐 출력됩니다. 

    재귀함수는 함수 자기 스스로를 호출하는 함수입니다. 이에 따라 순환문과 비슷하게 무한루프가 될 수 있기에 재귀함수에는 종료 조건이 필요합니다. 대표적인 재귀함수는 계승함수(factorial function)이 있습니다. 계승은 1부터 n까지 모두 곱하는 팩토리얼을 뜻합니다.

    계승함수를 코드로 구현해보면 다음과 같습니다. 이때 0!은 1입니다. 

    1
    2
    3
    4
    5
    6
    7
    def factorial(n):
        if n == 0:
            return 1
        else:
            return n * factorial(n -1)
     
    factorial(5# 120
    cs

    위 코드에서 def factorial 명령문에 factorial이 또 들어가 있는 것을 확인할 수 있습니다. 전달인자가 0이면 1을 반환하나, 0보다 큰 정수이면 n*factorial(n -1)을 호출합니다. 함수 자신을 부를 때마다 n -1마다 인자의 수를 감소시키다가 0이면 합을 반환하고 함수 실행이 끝납니다. 

     

     

    'Python' 카테고리의 다른 글

    함수2 - 함수의 종류  (0) 2022.03.07
    사용자 정의 함수(def)  (0) 2021.11.25
    4. 자료형(data types)- 리스트(list)  (0) 2021.09.11
    3. 자료형(data types)- 숫자 numbers  (0) 2021.09.11
    2. Python의 함수(function)  (0) 2021.09.10

    댓글

Designed by Tistory.