관리 메뉴

9. 파이썬(Python) 함수 본문

Python/Python 기본 개념

9. 파이썬(Python) 함수

ª_ª 2017. 8. 30. 10:04
728x90
반응형

 

함수란?

파이썬 함수를 간단하게 설명하기 위해 예시를 들겠습니다. 집에서 사용하는 냄비를 생각해면, 우리는 냄비에 물, 채소, 양념 등등을 넣게 됩니다. 그리고 냄비를 이용해서 국, , 라면 등등을 만들게 됩니다. 우리가 냄비에 넣는 여러 가지 재료는 입력이 되고 국, 찜 라면 등등은 출력결과가 됩니다. 그렇다면 냄비는 무엇일까요? 바로 우리가 여기서 알고자 하는 함수 입니다. 입력을 가지고 어떤 일을 수행한 다음에 결과물을 내어놓게 되는 것이 바로 함수가 하는 일입니다.

 

함수를 사용하는 이유?

프로그래밍을 하다 보면 똑같은 내용을 자신이 반복해서 적고 있는 것을 발견 할 때가 있는데, 그 때가 바로 함수가 필요하다고 이야기 할 수 있습니다. 여러 번 반복해서 사용하는 것은 언제든지 계속 적으로 사용할 만한 가치가 있는 부분이라는 뜻입니다. , 이러한 경우 이것을 하나로 묶어서 입력 값을 주었을 때 결과 값을 반환해준다라는 식의 함수를 작성하는 것이 프로그래밍의 가속성을 높이는 좋은 방법 일 것입니다.

 

1. 파이썬 함수의 기본 구조


def 함수명(입력 인수):

            수행할 문장1

            수행할 문장2

            return 결과 값

            ......

 

- def는 함수를 만들 때 사용하는 예약어입니다.

- 함수명은 프로그래머가 이름을 정하는 것입니다.

- 괄호 안에 있는 입력 인수는 입력될 값을 넣는 곳입니다.

- 결과 값은 반환하는 부분이라고 생각하면 되는데 출력 값이라고 생각하면 됩니다.

 

2. 파이썬 함수의 종류 4가지


함수는 입출력 유무에 따라서 크게 4가지로 나눌 수 있습니다.

2.1. 입력도 있고 반환도 있는 함수

2.2. 입력은 있고 반환은 없는 함수

2.3. 입력은 없고 반환은 있는 함수

2.4. 입력도 없고 반환도 없는 함수

 

보통 다른 프로그램도 위에 4가지를 거의 벗어나지는 않습니다.

 

2.1. 입력도 있고 반환도 있는 함수(입력 O, 반환 O)

>>> def sum(x, y):

        result = x + y

        return result

>>> a = 10

>>> b = 21.5

>>> c = sum(a, b)

>>> print(c)

31.5

 

따로 자료형을 선언할 필요가 없기 때문에 정수와 실수를 더할 수 있습니다.

 

2.2. 입력은 있고 반환은 없는 함수(입력 O, 반환 X)

>>> def sum(x, y):

            print("%d + %d = %d 입니다." %(x, y, x + y))

>>> sum (11, 13.2)

11 + 13 = 24 입니다.

 

여기서 반환 값이 없다고 했는데 “11 + 13 = 24입니다.”라는 문장을 출력 했는데 왜 반환 값이 없다고 말하는지 의문점 이 생길 것입니다. 이유는 반환 값은 return 으로만 받을 수 있습니다.

 

>>> result = sum(11, 13.2)

>>> print(result)

None

 

result의 값은 None입니다. None이란 아무것도 없다라는 것 입니다. 위에서 본 sum 함수처럼 반환 값이 없을 때 None를 반환하게 됩니다.

 

2.3. 입력은 없고 반환은 있는 함수(입력 X, 반환 O)

>>> def int_input():

            print("숫자를 입력 하세요:")

            return int(input())


>>> a = int_input()

숫자를 입력 하세요:

5

>>> a == 5

True

 

입력 인수를 받는 곳은 없고 return문이 있어서 입력 값은 없고 반환값은 있는 함수입니다.

 

2.4. 입력도 없고 반환도 없는 함수(입력 X, 반환 X)

>>> def tell():

print("Hello Python~!")

>>> tell()

Hello Python~! 


입력 인수를 받는 곳도 없고 return문도 없으니 입력 값과 반환 값이 없는 함수입니다.

 

3. 파이썬 함수 심화

 

3.1. 입력 인수 하나로 여러 개 표현하기

파이썬에서는 입력 인수 하나로 여러 개의 인수처럼 활용 할 수 있습니다. 예를 들어서 합계를 구하는 함수를 만들 때 입력 인수를 345개 등을 사용하려면 여러 개를 만들어야 하는데 이러한 부분을 해결해 주는 방법이 있습니다.

 

def 함수명(*입력 인수):

            수행할 문장

            ......

 

위에서 보이는 *를 입력 인수 앞부분에 넣어 주면 됩니다.

 

3.1.1. 여러 인수의 합계를 구하는 함수

>>> def sum_total(*args):

            sum = 0

            for i in args:

                        sum = sum + i

            return sum

 

>>> sum_total(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

55

>>> sum_total(1, 3, 5, 7, 9)

25

>>> result = sum_total(5, 6, 7, 8, 9, 10)

>>> print(result)

45

 

args는 입력 인수를 뜻하는 영어 단어인 arguments의 약자입니다. 그래서 자주 사용하는 변수라고 생가하면 됩니다. args말고 *num, *a 등 아무 변수이름을 사용해도 됩니다.

 

응용 해보기(사칙연산)

>>> def sum_mul_div(choice, *args):

            if choice == "sum": # choicesum을 입력 받았을 때

                        result = 0

                        for i in args:

                                    result = result + i # args에 입력 받은 모든 값을 더합니다.

            elif choice == "mul": # choicemul을 입력 받았을 때

                        result = 1

                        for i in args:

                                    result = result * I # args에 입력 받은 모든 값을 곱합니다.

            elif choice == "div": # choicediv을 입력 받았을 때

                        result = 0

                        sum1 = 0

                        for i in args:

                                    sum1 = sum1 + i

                                    result = sum1 / len(args)

            return result

 

>>> result = sum_mul_div("sum", 1, 2, 3, 4, 5)

>>> print(result)

15

>>> result = sum_mul_div("mul", 1, 2, 3, 4, 5)

>>> print(result)

120

>>> result = sum_mul_div("div", 1, 2, 3, 4, 5)

>>> print(result)

3.0

 

sum_mul_div(“sum”, 1, 2, 3, 4, 5) 또는 sum_mul_div(“mul”, 1, 2, 3, 4, 5) 또는 sum_mul_div(“div”, 1, 2, 3, 4, 5)처럼 choice 부분에 “sum”, “mul”, “div”이라는 문자열을 입력 값으로 줍니다. 그리고 그 뒤에는 개수와 상관없이 여러 개의 숫자를 입력 할 수 있습니다.

 

4. return 살펴보기

return은 값을 반환한다고 알려 드렸습니다. 그렇다면 반환하는 값은 하나만 되는지 아니면 여러 개가 되는지 궁금해집니다.

 

>>> def sum_mul_div(x, y):

return x+y, x*y, x/y

>>> result = sum_mul_div(4, 2)

 

이렇게 사용하게 되면 x+y, x*y, x/y 3개 인데 결과 값을 받아들이는 변수는 result 하나만 쓰였으니 오류가 발생 할 수도 있지 않을까라고 생각합니다. 하지만 오류가 발생하지 않습니다. 이유는 함수의 결과 값은 3개가 아니라 언제나 1개라고 생각하고 있기 때문입니다. sum_mul_div() 함수의 결과 값 x+y, x*y, x/y는 하나인 튜플 값으로 (x+y, x*y, x/y)로 반환합니다.

 

>>> print(result)

(6, 8, 2.0)

 

하나의 튜플 값을 여러 개의 결과 값처럼 받고 싶다면 아래와 같이 하면 됩니다.

>>> sum, mul, div = sum_mul_div(4, 2)

>>> print("sum = %d\nmul = %d\ndiv = %d" %(sum, mul, div))

sum = 6

mul = 8

div = 2

 

sum, mul, div = (6, 8, 2)가 되어서 sum = 6 mul = 8 div = 2가 됩니다.

 

위와 같은 사항을 보고 return문을 여러 번 사용하면 여러 개의 반환 값이 나오지 않을까요?

>>> def sum_mul_div2(x, y):

            return x + y

            return x * y

            return x / y

 

>>> result = sum_mul_div2(4, 2)

>>> result

6

>>> sum2, mul2, div2 = sum_mul_div2(4, 2)

Traceback (most recent call last):

File "<pyshell#19>", line 1, in <module>

sum2, mul2, div2 = sum_mul_div2(4, 2)

TypeError: 'int' object is not iterable

 

네 안 된다고 생각 하시면 됩니다. return문을 만나게 되면 그 부분을 반환하고 함수를 빠져 나가게 됩니다.

 

5. 함수의 입력 인수 초기 값 설정

위에 제목처럼 함수 입력 인수에 값을 설정할 수 있습니다.

>>> def add(x=1, y=2): #xy의 초기값을 설정했습니다.

            return x + y

 

>>> result1 = add() # 아무것도 입력하지 않아서 1 + 2 =3

>>> result2 = add(5) # 5 + 2 = 7

>>> result3 = add(5,3) # 5 + 3 = 8

>>> print(result1)

3

>>> print(result2)

7

>>> print(result3)

8


초기 값을 설정해 놓고 아무것도 입력하지 않으면 초기 값을 기준으로 결과를 만들어 냅니다.

 

초기 값 설정 시 주의사항

초기 값 생성자는 맨 끝에서부터 채워야 합니다. , 오른쪽부터 채워야 하고 여러 인수가 존재하면 띄엄 띄엄해서 입력을 못합니다. 연속적으로 이어져 있어야 합니다. 그렇지 않으면 아래와 같은 에러가 발생할 수 있습니다.

 

>>> def add1(x = 1, y, z):

            return x + y + z

SyntaxError: non-default argument follows default argument

>>> def add2(x = 1, y = 1, z):

            return x + y + z

SyntaxError: non-default argument follows default argument

>>> def add3(x = 1, y, z = 1):

            return x + y + z

SyntaxError: non-default argument follows default argument

>>> def add4(x, y = 1, z = 1):

            return x + y + z

 

위에 예제를 보고 변수들을 항상 뒤쪽에 위치시키는 것을 잊지 마세요.

 

파이썬(Python) 함수 연습문제 풀러 가기



728x90
반응형
Comments