

위의 그림으로 예를 들어보면 input(x) 라는 입력값이 어떤 기능을 하는 함수인 f 를 지났더니 output f(x)로 출력되었다. 입력값을 가지고 어떤 일을 수행한 다음에 그 결과물을 내어놓는 것, 이것이 바로 함수가 하는 일이다.
어떤 반복된 코드나 작업을 분리하면서 코드를 재사용하거나 조금 더 객체지향적인 프로그래밍을 위해 사용
파이썬에서 함수는 어떻게 정의하고 실행할 수 있는지 알아보자.
def function_name():
print("함수호출")
return True
함수는 기본적으로 위의 내용처럼 정의만 한다고 실행이 되지 않고 해당 함수를 호출을 해줘야 실행이 된다.
a = function_name()
def add(a, b):
return a+b
기본 구조와는 약간 다르게 함수명()의 ()부분에 어떤 값이 들어가있다. 이 값을 매개변수라고 한다.
매개변수(parameter) : 함수에 입력으로 전달된 값을 받는 변수
def add(a, b) # a,b 는 매개변수인자(argument) : 함수를 호출할 때 전달하는 입력값
print(add(3, 4)) # 3,4 는 인자
즉, 매개변수는 함수에 인풋 데이터를 전달하기 위한 변수이다.
이를 이용하여 함수에서 내가 원하는 입력값을 받도록 할 수 있다.
구조를 알아보았으니 이제 어떤식으로 사용되는지에 대한 예시를 확인해보자.
def get_input_user(message):
user = input(message)
return user
user = get_input_user("사용자의 이름을 입력하세요>")
message를 받도록 하였다.user라는 지역변수를 만들어서 사용자에게 받은 input 값을 저장하도록 하였고, 그 값을 함수의 출력값으로 return 시켰다. 위의 예제에서 사용자의 입력값이 제대로 된 형태로 들어왔는지 (이름은 문자열, 나이는 숫자) 확인하고, 제대로 된 값이 들어올 때 까지 반복문을 실행하는 기능을 추가해보자.
def get_input_user(message, casting):
while True:
try:
user = casting(input(message))
return user
except:
continue
user = get_input_user("사용자의 이름을 입력하세요>", str)
ages = get_input_user("사용자의 나이를 입력하세요>", int)
함수의 매개변수로 casting을 추가했으며 이름은 문자열, 나이는 정수형으로 받도록 하였다.
try/except로 조건을 만족하면 결과값을 return , 만족하지 않으면 다시 반복문을 continue하도록 했다.
애초에 처음부터 매개변수에 기본값을 설정하는 방법도 있다.
def get_input_user(message, casting=int):
ages = get_input_user("사용자의 나이를 입력하세요>")
이렇게 입력하면 굳이 함수를 호출할 때 int로 타입을 지정해주지 않아도 casting=int에서 int값만을 받는다.
결과
def add_and_mul(a,b):
return a+b, a*b
result = add_and_mul(3,4)
이런 함수를 정의하면 결과는 어떻게 나올까?
result = (7, 12)
함수의 결괏값은 2개가 아니라 언제나 1개이기 때문에 add_and_mul 함수의 결괏값 a+b와 a*b는 튜플값 하나인 (a+b, a*b)로 돌려준다.
만약 이 하나의 튜플 값을 2개의 결괏값처럼 받고 싶다면 다음과 같이 함수를 호출하면 된다.
result1, result2 = add_and_mul(3, 4)
return은 함수의 주로 결괏값을 반환할 때 사용된다. 이러한 return이 함수를 빠져 나올 때 사용되기도 한다.
def say_nick(nick):
if nick == "바보":
return
print("나의 별명은 %s 입니다." % nick)
만약에 입력값으로 '바보'라는 값이 들어오면 문자열을 출력하지 않고 함수를 즉시 빠져나간다.
return을 이런식으로 사용하기도 하더라.
파이썬에서는 함수가 일급 객체로 취급된다.
일급 함수는 객체 지향 프로그래밍중에서 파이썬을 포함한 몇몇 프로그래밍 언어에서 발견할 수 있는 개념이다.
일급 객체로 취급될 수 있는 조건엔 크게 세가지가 있다.
파이썬에서 함수는 일급 객체라고 취급하는걸 보면 위의 조건을 모두 만족하는 것으로 보인다.
def hi():
print("Hello")
hello = hi
hello()
print(type(hello))
hi()함수를 hello라는 변수 안에 담았다. 여기서 확인하고 넘어가야할 것은 변수에 담을 때는 ()를 넣지 않는다는것!
hello라는 변수는 이제 함수hi가 담겨있으니 이 변수를 실행할 땐 hello()로 실행시키면 된다.
함수가 제대로 담겨있는지 타입을 확인해보자.

함수는 위에서도 설명했듯 생산성과 효율성을 높이기 위해 필수적이기 때문에 자유자재로 함수를 만들고 사용할 수 있도록 연습에 연습을 해야겠다.