Python 기본 - 7. 파이썬으로 함수 다루기

함수 (Function)가 무엇인지는 우리 모두 알고 있다.

함수를 사용하는 이유가 무엇일까?

기본적으로 프로그래머란 종족들은 귀찮음을 최소화 하고 어떻게든 꿀(?)을 빨려고 한다.

중복되는 코드는 절대 작성하지 않는다는 뜻.

반복되는 부분이 있을 경우, 이를 그룹화 하여 함수로 만들고, 나중에 또 쓰고 싶을 때 한줄로 해결해 버린다.

결과적으로 코드의 양이 줄어들겠지?

이러한 함수화는 프로그램의 흐름을 명확하게 하는 순기능이 있다.

이제 우리의 본분으로 돌아가서, 파이썬에서의 함수 사용 방법을 알아보자.

함수의 구조는 아래와 같다.

1
2
3
4
def 함수이름(매개변수):
<수행할 문장>
...
return 결과값

근데 이렇게 보면 감이 잘 안오니까 예시를 실행 해 보자.

1
2
3
4
5
6
7
8
9
10
11
def sum(a, b):    # 함수 이름은 sum이고 매개변수는 a와 b
result = a + b
return result # 결과값 result 반환

>>> value = sum(3,4)
>>> print(value)
7

>>> value_2 = sum(a=3, b=7) # 매개변수 지정
>>> print(value_2)
10

함수를 작성할 때 위와 같은 방법이 정석이지만, 매개변수 자리를 비워 놓거나 return 값 지정을 안해줘도 돌아간다.

그런데, 입력값이 몇 개가 될지 모를 때는 어떻게 해야 할까?

위의 예제는 매개변수가 a와 b이므로 입력값이 2개로 지정되어 있는데..

파이썬에서는 “*”을 이용한다.

1
2
3
4
5
6
7
8
9
def my_sum(*args):    # args는 임의의 변수명
sum = 0
for i in args: # 여러 개 입력 시 tuple로 들어감
sum = sum + i
return sum

>>> result = my_sum(1,2,3,4,5)
>>> print(result)
15

위의 예시처럼 변수명에 *을 붙이면 여러 개를 입력할 수 있게 된다.

지금까지는 함수의 입력값에 초점을 두었다면, 이제부터는 return에 대해서 알아보자.

파이썬에서 함수의 결과값은 언제나 하나이다.

1
2
3
4
5
6
7
def sum_sub(a,b)
return a+b # 여기서 함수가 종료됨
return a-b

>>> result = sum_sub(3,2)
>>> print(result)
5

즉, 함수는 return문을 만나는 순간 결과값을 반환하고 종료된다.

return의 이러한 성질을 사용해서 다른 방법으로 응용이 가능하다.

1
2
3
4
5
6
7
def say_my_name(name):
if name == ""
return
print("제 이름은 {} 입니다.".format(name))

>>> say_my_name("김정욱")
제 이름은 김정욱 입니다.

이처럼 return을 단독으로 쓰면 함수를 즉시 빠져나갈 수 있다.

이번에는 조금 다른 형태의 입력값을 알아보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def say_myself(name, old, man=True): 
print("제 이름은 {} 입니다.".format(name))
print("나이는 {} 살 입니다.".format(old))
if man:
print("남자입니다.")
else:
print("여자입니다.")

>>> print(say_myself("김정욱", 26))
제 이름은 김정욱 입니다.
나이는 26 살 입니다.
남자입니다.

>>> print(say_myself("김정욱", 26, True))
제 이름은 김정욱 입니다.
나이는 26 살 입니다.
남자입니다. # 위와 동일한 출력값

>> print(say_myself("이하린", 20, False))
제 이름은 이하린 입니다.
나이는 20 살 입니다.
여자입니다. # 매개변수 False 출력값

man=True와 같이 매개변수에 미리 값을 넣어준 경우, 따로 입력하지 않아도 자동으로 True값으로 고정된다.

그래서 두 가지 결과값이 동일하게 출력된 것이다.

man 변수에 False 값이 전달된 경우, if-else문에 의하여 출력값이 바뀌었음을 확인할 수 있다.

마지막으로, 함수 사용 시 주의할 점을 소개한다.

1
2
3
4
5
6
a = 1
def test(a):
a = a +1

>>> print(a)
1

자칫 하다가는 결과값이 2라고 착각할 수 있다. 왜 이럴까?

함수 밖의 변수와 함수 안의 변수가 a로 이름이 똑같아서 혼란을 발생시킨 것이다.

함수 안의 매개변수는 함수 안에서만 사용되는 함수만의 변수 임에 유의하자.

그냥 global 변수와 이름을 구별되게 지으면 문제는 해결된다..

수업 시간에 강사님께서 매우 강조하셨다.

함수는!

한 가지를 해야 한다.

그 한 가지를 잘 해야 한다.

그 한 가지만을 해야 한다.