함수 기본 구조
함수는 자주 사용하는 기능을 정의하여 필요할 때 호출하여 사용하는 핵심 문법입니다.
함수를 만들 때는 def 키워드로 시작하여 함수명과 입력 매개변수 목록 및 수행할 구문을 정의합니다.
def 함수명([입력 매개변수 목록]):
수행할 일
다음은 두 개의 인자를 전달받아 더한 값을 반환하는 함수를 정의한 코드입니다.
[In]
def addxy(x,y):
return x+y
이렇게 정의한 함수는 함수 호출을 통해 사용할 수 있어요.
함수 호출할 때는 함수명과 입력 인자를 전달합니다.
함수명([입력 인자 목록])
다음은 addxy 함수를 호출하여 사용하는 코드입니다.
[In]
print(addxy(2,3))
print(addxy(1,3))
print(addxy(2,5))
[out]
5
4
7
입력 매개변수
함수의 입력 매개변수는 선택 사항입니다.
자주 사용하는 코드를 함수로 정의한 후 필요할 때 호출하여 사용하기 위해 입력 매개변수가 없게 정의할 수도 있습니다.
다음은 one 을 출력하는 간단한 함수입니다. 이 함수는 설명을 위한 것이지 특별한 의미를 지니고 있지 않습니다.
[In]
def print_one():
print("one")
위 함수를 호출할 때는 입력 인자없이 함수 이름과 호출을 의미하는 소괄호만 사용합니다.
[In]
print_one()
print_one()
print_one()
[out]
one
one
one
입력 매개변수가 있을 때 인자 개수와 순서를 맞춰서 전달하는 것이 기본입니다.
다음은 인자 전달 개수를 확인하기 위해 정의한 함수입니다.
하는 일은 출력할 메시지와 출력 횟수를 입력 인자로 전달받아 출력하는 함수입니다.
[In]
def printn(message, n):
for _ in range(n):
print(message,end=' ')
print()
다음처럼 입력 인자 개수와 순서를 제대로 전달하면 잘 동작합니다.
[In]
printn("Hello",4)
[out]
Hello Hello Hello Hello
하지만 전달할 인자 개수가 부족하면 TypeError가 발생합니다.
[In]
printn("Hello")
[out]
TypeError Traceback (most recent call last)
<ipython-input-9-5e543b7da080> in <module>()
----> 1 printn("Hello")
TypeError: printn() missing 1 required positional argument: 'n'
전달할 인자 개수가 너무 많아도 TypeError가 발생합니다.
[In]
printn("Hello",4,5)
[out]
TypeError Traceback (most recent call last)
<ipython-input-10-e8119941e3b8> in <module>()
----> 1 printn("Hello",4,5)
TypeError: printn() takes 2 positional arguments but 3 were given
디폴트 매개변수, 가변 매개변수
입력 매개변수에는 디폴트 값을 지정하는 디폴트 매개변수가 있습니다.
다음은 원의 면적을 출력하는 함수입니다.
반지름은 일반 입력 매개변수이며 호도(radian)는 2PI로 디폴트 값을 지정하였습니다.
[In]
def print_area(radius, radian=2*3.14):
print(f'area:{radius*radius*radian/2}')
디폴트 매개변수도 호출할 때 값을 전달하여 사용할 수 있습니다.
[In]
print_area(1,3.14)
[out]
area:1.57
디폴트 매개변수 값을 전달하지 않으면 디폴트 설정 값으로 동작합니다.
[In]
print_area(1)
[out]
area:3.14
두 개 이상 디폴트 매개변수가 있을 때에 어떠한 변수에 어떠한 값을 전달할 것인지 명시하여 전달할 수 있습니다.
이 때 디폴트 매개변수의 전달 순서는 바뀌어도 잘 동작합니다.
[In]
def foo(a,b=0,c=1):
print(f"a:{a} b:{b} c:{c}")
foo(2)
foo(2,b=2)
foo(2,c=2)
foo(2,c=2,b=4)
[out]
a:2 b:0 c:1
a:2 b:2 c:1
a:2 b:0 c:2
a:2 b:4 c:2
가변 입력 매개변수는 입력 매개변수의 개수가 정해져 있지 않음을 의미합니다.
입력 매개변수 이름 앞에 *를 붙여 가변 입력 매개변수를 표시합니다.
[In]
def fun_varvar(*args):
for arg in args:
print(arg)
fun_varvar(1,2,3,'Hello')
[out]
1
2
3
Hello
리턴
함수는 수행 결과를 반환(return)할 수 있습니다.
결과 값을 반환할 때는 return 뒤에 값을 표현합니다.
다음은 입력 인자로 전달받은 목록의 요소 합계를 구하여 반환하는 함수와 이를 호출하여 사용하는 코드입니다.
[In]
def getsum(ls):
s = 0
for e in ls:
s += e
return s
s = getsum([1,4,2,3])
print(s)
[out]
10
return 문은 단순히 함수를 끝내기 위한 목적으로도 사용할 수 있습니다.
다음은 양수가 아닌 수를 만났을 때 함수를 바로 끝내기 위해 return문을 사용한 함수입니다.
[In]
def soo(num):
print('soo 1')
if num>0:
print(num)
else:
return
print('soo 2')
양수를 전달하면 함수 끝까지 동작합니다.
[In]
soo(4)
[out]
soo 1
4
soo 2
양수가 아닌 수를 전달하면 return 문을 만나 중간에 끝납니다.
[In]
soo(-1)
[out]
soo 1