특정 용도의 코드를 한 곳에 모아 놓은 것을 뜻한다.
함수의 장점 :
코드의 용도를 구분할 수 있다.
코드를 재사용할 수 있다.
실수를 줄일 수 있다.
def 함수이름():
코드
def는 define의 약자다.
함수()
반복문에 사용했던 pass를 함수에도 사용할 수 있다.
>>> def add(a, b): # 매개변수 두개 지정
... print(a + b)
...
>>> add(10, 20) # 호출하며 매개변수 값을 준다.
30
함수를 호출할 때 넣는 값을 인수(argument)라고 부른다. add(10, 20)에서 10과 20이 인수다.
함수의 :(콜론) 바로 다음 줄에 """ """(큰따옴표 세 개)로 문자열을 입력하면 함수에 대한 설명을 넣을 수 있다. 이런 방식의 문자열을 독스트링(문서화 문자열, documentation strings, docstrings)이라고 한다. 단, 독스트링의 윗줄에 다른 코드가 오면 안 된다.
def 함수이름(매개변수):
"""독스트링"""
코드
def 함수이름(매개변수):
"""
여러 줄로 된
독스트링
"""
코드
독스트링을 출력하려면 print(add.__doc__)와 같이 함수의 __doc__을 출력하면 된다.
help에 함수를 넣으면 함수의 이름, 매개변수, 독스트링을 도움말 형태로 출력해준다.
return을 사용한다.
>>> def add(a, b):
... return a + b
...
>>> x = add(10, 20)
>>> x
30
# 변수를 사용하지 않고 바로 다른 함수에 넣어 사용할 수도 있다.
>>> print(add(10, 20))
30
return으로 함수 중간에서 빠져나올 수 있다. 다음은 매개변수 a가 10이면 함수를 그냥 빠져나온다.
>> def not_ten(a): ... if a == 10: ... return ... print(a, '입니다.', sep='') ... >> not_ten(5) 5입니다. >> not_ten(10) >>
>>> def add_sub(a, b):
... return a + b, a - b
...
# 튜플이 변수 여러 개에 할당되는 특성을 이용한 것이다(언패킹).
>>> x, y = add_sub(10, 20)
>>> x
30
>>> y
-10
#변수에 넣지 않고 바로 출력할 경우 튜플에 값이 들어간디.
>>> x = add_sub(10, 20)
>>> x
(30, -10)
파이썬에서는 스택과 방향이 반대인데, 함수가 아래쪽 방향으로 추가되고 함수가 끝나면 위쪽 방향으로 사라진다.
처음부터 끝까지 돈 후 다시 함수 mul까지 호출한 후 안으로 들어가 return c까지 실행하면 함수 mul의 스택 프레임이 만들어지고 매개변수 a와 b 그리고 변수 c가 들어간다.
줄 9 print(d)까지 실행해서 함수 mul을 끝내고 함수 add로 되돌아긴다. 이렇게 하면 mul에서 반환한 반환값 200이 변수 d에 저장되며 add의 스택 프레임에 들어간다. mul은 끝났으므로 스택 프레임도 사라진다.
그다음에 줄 13 add(x, y)까지 실행해서 함수 add를 끝낸다. 이렇게 하면 add의 스택 프레임도 사라진다.