저번에 함수를 설명할 때는 함수는 어떠한 일을 대신해주는 것이라고 했다.
분명 파이썬에서 기본으로 제공되는 함수와 메소드를 사용하면 분명 원하는 결과를 빠르게 만들어낼 수 있다.
틀린말은 아니지만 이는 함수를 절반밖에 설명하지 못한다.
함수의 본래 목적은 같은 코드를 여러번 반복해서 사용하는 경우, 코드를 한 번 적어서 언제든 재활용하는 기능이고 궁극적으로는 코드의 간략화에 있다.
예를들면 1부터 n까지 수의 합을 구해주는 코드가 있다고 가정하자.
만약 1부터 n까지의 합을 여러번 구해야한다면?
30줄이 될지도 모르는 저 코드를 n까지의 합을 구해야하는 횟수만큼 적어야한다.
물론 복붙하면 되지만 이는 결과적으로만 해결이고 코드의 간략화에 있어서는 매우 안좋은 코드이다.
이처럼 사용자가 코드를 한곳에 저장해 필요때마다 불러오면, 결과는 같아도 코드가 간략화되어 가독성이 높아진다.
여기서 코드를 한곳에 저장하는걸 함수의 선언, 불러오는걸 호출이라고한다
그리고 이런 용도의 함수를 사용자 정의 함수(user-defined function)라고 한다.
함수가 어떻게 생겼는지 아래의 사진과 함께 알아보겠다.
해당 사진으로 보여주는 def는 함수를 만들때 사용하는 키워드이다. 사용형식은 아래와 같다.
def funcname( parameter ) : suite . . .
def는 키워드
funcname은 함수이름
( )은 함수임을 나타내는 소괄호
parameter는 매개변수
: 는 범위지정
suite는 실행코드를 뜻한다.
아래에서 실제 함수를 만들어 볼테니 비교해 보기를 바란다.
해당 예제에서 함수 선언에 def add_up_to_n(n): 을 사용했다
add_up_to_n은 함수이름이고 함수의 이름 사용형식은 변수의 이름 형식과 같다.
함수이름 뒤에는 (소괄호)가 따라온다. 만약 소괄호가 없다면 변수와 함수의 구분이 안될 것이다.
n은 매개변수이다. 매개변수는 값을 함수 밖에서 가져오는 변수이다. (소괄호)사이에 위치한다.
2~7번처럼 함수의 선언 밑으로 들여쓰기돼 있는 줄들은 함수의 실행문이다. 함수 호출시 실행문이 작동한다.
9번줄의 add_up_to_n(10)은 함수의 호출문이다. 1~7에서 함수를 만들었으나 실질적인 함수의 실행은 9번이다.
9번의 실행결과는 아래와 같다.
해당 코드 설명은 여기까지하고
매개변수가 값을 어떻게 가져오는지 아래의 사진을 통해 설명하겠다.
우선 위의 사진은 9번줄의 함수호출문과 호출된 함수의 관계 설명을 위해 시각화 한 사진이다.
프로그램의 진행과는 상관 없고 오직 데이터의 이동을 화살표로 표현한 것이다.
함수 호출문에서 함수에게 넘겨주는 값은 인수(argument)라고 한다.
인수의 값은 매개변수(parameter)에게 넘겨지게된다.
매개변수는 이제 10이라는 값을 가지게되고 이 값을 통해 함수의 실행문이 작동한다.
여기서 중요한 것은 인수가 뭐고 인자가 뭐고가 아니라
함수의 선언시 데이터를 넘겨받는 매개변수의 갯수와
함수의 호출시 넘겨주어야하는 인수의 갯수가 같아야한다는 것이다.
매개변수 개수 == 인수 개수를 알고가자. 다음 포스트에서 자세하게 알아보겠다.
다시 설명으로 돌아오자면
해당 코드에서 매개변수n는 range(n+1)에서 사용되었다.
n+1은 10+1이되어 연산후 11이 되었고
range(11)은 0부터 10까지의 숫자리스트를 반환했다.
그리고 for문의 sum += i이 작동해 0~10까지의 합을 연산후 55가 출력된것이다.
추가적으로 하나 더 알아보자면 함수는 반환값을 가질 수 있다.
반환값이란 함수의 실행종료후 함수 밖으로 반환하는 값이다.
매개변수가 함수 밖에서 함수로 데이터를 받아오는 개념이라면
반환은 함수에서 밖으로 데이터를 내보내는 개념이다.
사용방법은 return 값 이다.
함수가 종료되면 '기입된 값'을 반환한다.
주로 함수 실행문을 통해 일을 하고 그 결과를 반환할 때 사용된다.
아래의 예제를 통해 알아보겠다.
add_up_to_n()은 종료시 sum값을 반환했고
sum값은 rvalue로 보내졌다.
rvalue를 출력하면 55가 나온다.
그리고 만약 return 1,2,3,4처럼
return 값에 여러 숫자를 기입했을 경우
함수는 기입한 값들을 원소로 가지고있는 tuple을 반환한다.
'Python > Python 기초' 카테고리의 다른 글
[Python] 함수 3 (*args, **kwargs) (0) | 2022.03.10 |
---|---|
[Python] 함수 2 (디폴트 매개변수) (0) | 2022.03.09 |
[Python] 반복문 2 (for, in, range) (0) | 2022.03.03 |
[Python] 반복문(while) (0) | 2022.03.02 |
[Python] 조건문(if, else, elif) (0) | 2022.03.01 |