지난시간에 함수를 직접 정의해봤다.
하지만 지난시간에 우리가 정의한 함수들은 인수도 없었고 리턴값도 없었다.
이번시간에는 인수를 받는 방법과 리턴값에 대해 알아보자.
1. 매개변수
1-1) 매개변수
● 함수에서 인수의 값을 받는 변수를 매개변수(parameter)라고 한다.
● 함수에서 return이 실행되면 함수는 반환값을 돌려주고 바로 종료된다.
def function_name(parameter1): ## 괄호안의 parameter1 이 함수의 매개변수
#first line of code...
#.
#.
#.
return some_result ## some_result가 함수의 반환값
## return some_result1, some_result2와 같이 여러 값을 반환할 수도 있다.
함수에게 인수를 줄 때 기본적으로 순서대로 인수와 매개변수를 매칭시킨다.
def function_name(parameter1, parameter2):
#.
#.
return some_result
a = function_name(1,2) ## parameter1에 1, parameter2에 2를 대입
a = funcion_name(parameter2 = 2, parameter1 = 1) ## 6번 line 과 똑같은 코드
여기서 자동으로 매칭시키고 싶은 positional 인수는 무조건 keyword 인수보다 이전에 나와야 한다.
function_name(1,parameter2 = 2)와 같이 인수가 배정되어야 한다.
1-2) 함수의 매개변수의 초기값 설정
● 함수를 정의할 때 괄호 안에 대입문처럼 (매개변수 = 값)으로 초기값을 설정가능
● 초기값이 있는 매개변수는 인수를 못받으면 초기값을 대입시킨다.
● 초기값이 없는 매개변수는 인수를 꼭 받아야 한다.
# 초기값
# def function_name(parameter1, parameter2 = 2, parameter3): # error positional변수가 keyword변수보다 앞에 나오지 않음
def function_name(parameter1, parameter2 = 2, parameter3 = 3):
print(f"parameter 1 : {parameter1}")
print(f"parameter 2 : {parameter2}")
print(f"parameter 3 : {parameter3}")
function_name(5) #parameter1에 5 대입, parameter2,3은 함수에 작성된 초기값 대로
print("#########")
function_name(parameter2 = 4, parameter1 = 5) #parameter1,2에 숫자 대입, parameter3은 초기값대로
print("#########")
function_name(5, 6, 7) #모든 parameter에 숫자 대입
print("#########")
지난시간에 직접 만든 함수와 같이 꼭 인수가 있지 않고 return을 사용하지 않아도 함수는 구현 가능하다.
1-3) Python에서 제공하는 함수
Python Standard Library - 파이썬이 미리 구현해서 제공한 코드(자료형, 함수)
math 라이브러리는 수학 함수, random라이브러리는 의사 난수 생성을 위한 코드 등등
라이브러리에 있는 함수들을 사용하고 싶으면 import예약어를 사용하면 된다.
# import
import math, random, time ## math, random, time에 있는 함수를 가져옴
print(math.pi) # 3.1415...
time.sleep(3)
print(random.randint(0, 10)) # 0부터 10까지 무작위
time.sleep(3)
# from ... import
from math import pi, sin, cos ## math에 있는 함수중에서 pi, sin, cos만 가져옴
from random import randint
from time import sleep
print(sin(pi))
sleep(3)
print(cos(pi))
sleep(3)
# as
from math import pi as p, sin as s ## math에 있는 함수 중에서 pi를 p, sin을 s로 대신 사용함
import random as r
print(s(0))
print(p)
print(r.randint(0, 10))
2. 재귀함수
2-1) 재귀함수
함수 정의에 자신이 들어간 함수
● 자신을 호출하는 줄이 무조건 실행된다면 호출스택에 무한적으로 추가된다.
● 반복적인 작업을 반복문 대신 재귀함수로 대신할 수 있다.
● 재귀함수가 익숙하기 위해선 지난시간에 다뤘던 호출스택의 개념에 대해 잘 알고 있어야 한다.
def print_nums(n):
if n > 0:
print_nums(n - 1)
print(n-1)
print_nums(3)
출력결과
0
1
2
재귀함수를 구현할 때는 함수가 이미 잘 구현되어 있다고 생각하고 구현하면 접근하기 쉽다.
재귀함수는 알고리즘 유형인 다이나믹 프로그래밍을 구현하거나 백트래킹 기법에서 많이 사용되는 중요한 개념이기에 꼭 많은 연습을 통해 익히는 것이 중요하다.
**solved.ac 사이트에서 "#재귀"로 검색하여 연습할 수 있다.
'💂군대 > KAIST ICT Academy' 카테고리의 다른 글
MO8 - 사전과 집합 (1) | 2024.09.18 |
---|---|
MO7 - 리스트와 튜플 (1) | 2024.09.12 |
MO5 - 함수의 정의와 호출 (0) | 2024.08.21 |
MO4 - 조건문 (0) | 2024.08.07 |
MO3 - 반복문 (0) | 2024.08.03 |