위의 그림으로 예를 들어보면 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()
로 실행시키면 된다.
함수가 제대로 담겨있는지 타입을 확인해보자.
함수는 위에서도 설명했듯 생산성과 효율성을 높이기 위해 필수적이기 때문에 자유자재로 함수를 만들고 사용할 수 있도록 연습에 연습을 해야겠다.