python
파이썬 함수 이해하기
햇농nongnong
2021. 12. 8. 19:40
(이 글은 '언어와정보처리' 과목에서 '파이썬 기초' 수업 내용을 정리한 글이다.)
pytorch 에 대해 들어가기 전, python 기초를 간단하게 리뷰하고 넘어가려한다.
함수 (function)
- 함수의 기본 개념 : 입력값 - 함수 - 출력값
- 코딩에서 가장 중요한 개념이자, 중급 수준의 코딩 실력으로 가기 위한 필수 과정
- 특정 작업을 하는 여러 줄의 코드를 하나의 묶음으로 정하여 편리하게 쓸 수 있음
- 반복적으로 사용하지 않더라도, 코드 전체에서 맡고 있는 역할에 이름을 부여하여 코드 내 '구간'을 만들 수 있음
함수 코드의 기본 구조
- 함수를 만들 때 입력값(var)을 추가하여 함수 안에서 사용할 수 있음
- 함수 내 일련의 코드를 거쳐 나온 결과는 return(반환)을 통해 함수의 결과로 출력
- def function(var) : code 1 code 2(var) ... return result
ex) 이름을 입력하면 "my name is (이름)." 이 출력되도록 하는 함수
def my_name(input_name):
message = "My name is {}.".format(input_name)
return message
name = "Python"
result = my_name(name)
print(result)
결과 : My name is Python.
ex) 성적-점수 표를 바탕으로 평균이 3.7 이 넘는 학생에게는 장학금을 주려고 한다.
학생별로 장학금을 받을 수 있는지 알아보자.
A+ : 4.3, A0 : 4.0, A- : 3.7, B+ : 3.3, B0 : 3.0
파이썬 : A0, B0, A+, A0, A-
파에톤 : B0, B+, A0, A+, B+
애플파이썬 : B+, B+, A0, A0, A+
grade_dict = {'A+':4.3, 'A0':4.0, 'A-':3.7, 'B+':3.3, 'B0':3.0}
# 학생과 성적 리스트를 각각 key 와 value 로 하는 딕셔너리 생성
student_score_dict = {'Python' : ['A0', 'B0', 'A+', 'A0', 'A-'],
'Phaethon' : ['B0', 'B+', 'A0', 'A+', 'B+'],
'Applepython' : ['B+', 'B+', 'A0', 'A0', 'A+']}
def check_scholarship(student_name):
# 학생 이름을 넣으면 student_score_dict에서 그 학생의 성적 리스트가 반환
student_score_list = student_score_dict[student_name]
score_total = 0
# 성적 리스트에서 성적을 하나씩 grade_dict 에서 나온 점수를 score_total 에 누적
for score in student_score_list :
score_total = score_total + grade_dict[score]
# 성적 평균 내기
num_subjects = len(student_score_list)
score_average = score_total / num_subjects
# 평균 점수가 3.7 이 넘는지 체크
if score_average > 3.7 :
msg = "Scholarship!"
else :
msg = "No scholarship"
# 장학금 지급 여부(msg)를 결과로 반환
return msg
scholarship_result_Python = check_scholarship('Python')
print(scholarship_result_Python)
scholarship_result_Phaethon = check_scholarship('Phaethon')
print(scholarship_result_Phaethon)
scholarship_result_Applepython = check_scholarship('Applepython')
print(scholarship_result_Applepython)
결과 : Scholarship!
No scholarship
Scholarship!
함수를 사용하지 않았을 때와 풀이 비교
- 똑같은 작업을 학생이 바꿀 때마다 똑같은 코드를 작성해서 실행해야 함
- 복사 및 붙여넣기를 할 수 있지만 불필요한 코드의 양이 그만큼 배로 증가함
- 코드 내에서 연달아 쓰지 않고 중간에 다른 코드가 있고 나중에 다시 써야 할 때 난감해짐
재귀함수 (recursive function)
- 함수를 정의하는 동안 함수 자기 자신이 함수의 정의에 포함되어 있는 형태
재귀함수 기본 구조
def func() :
code 1
code 2
if ~~ :
code 3
else :
func()
return something
- else 에 func() 이 있는 것처럼 함수 안에 자기 자신이 있음
재귀함수 활용 예시
- 0부터 입력값 n 까지의 합계 구하기 (단, n 은 자연수)
- 출력값 : 0 + 1 + 2 + ... + n
def add_upto_n(n) :
if n == 0 :
return 0
else :
total = n + add_upto_n(n-1)
return total
total = add_upto_n(100)
print(total)
결과 : 5050
함수 예제 문제
- 1, 1, 2, 3, 5, 8, 13, ... 처럼 앞 두 수의 합이 다음 수가 되는 피보나치 수열이 있다. 자연수 n을 입력하였을 때 n번째 피보나치 수열의 수가 나오는 함수를 만들어보자.
ex) n=7 ---> 결과 : 13
n=10 ---> 결과 : 55
n=20 ---> 결과 : 6765
def fibonacci(n):
if n == 1 or n == 2:
return 1
else :
n_th_fib_num = fibonacci(n-2) + fibonacci(n-1)
return n_th_fib_num
result_1 = fibonacci(7)
print(result_1)
result_2 = fibonacci(10)
print(result_2)
result_3 = fibonacci(20)
print(result_3)
결과 : 13
55
6765
함수 정리
- 함수는 반복 작업을 훨씬 효율적으로 처리할 수 있는 강력한 기능
- 특히, 재귀함수를 잘 이해하고 사용하면 while 보다는 안전한 조건부 무한 루프를 만들어 함수를 지속적으로 사용할 수 있게 됨
- 앞서 언급하였듯이, 함수 내에서도 IF문과 FOR문은 활발하게 쓰이고 있음