2023년 6월 업데이트
안녕하세요. SQLER의 코난 김대우입니다.
이번 강좌에서는, Python 초급 강좌 목차 - 13. 함수(Function)를 진행토록 하겠습니다.
SQLER에서 진행되는 전체 Python / 머신러닝 강좌 목록
코드를 실행하기 위해서는, vscode에서 새로운 파일을 만들고 실행하시면 됩니다.
예를 들어, 13_function.py를 생성하고 코드를 실행합니다.
TL;DR
기본적인 함수 코딩 방법과 함수를 통해 코드를 재사용 할 경우의 장점, 함수에 파라미터를 전달해 동적으로 결과를 리턴하는 방안을 예제 코드를 통해 소개합니다.
Python 초급 강좌 목차 - 13. 함수(Function)
코드를 복붙 하는 것은 개발자에게 일반적인 일입니다. 물론, 이렇게 복붙 하는 것도 한 방법이지만, 반복되는 코드를 함수로 생성하는 것이 더 효율적인 방법이죠. 그럼 함수, 시작합니다.
함수(Functions)
함수를 사용하면 반복되는 코드를 가져와 필요할 때, 호출할 수 있는 모듈로 재사용할 수 있습니다. 함수는 def
키워드로 정의되며, 코드에서 함수가 호출되기 전에 선언되어야 합니다. 함수는 파라미터(parameter-매개 변수)를 사용할 수 있고, 값을 리턴할 수 있습니다.
코드를 복붙 할 경우의 코드 패턴
아래 코드와 같이, "task completed" 출력과 현재 일시 출력 코드 부분이 반복됩니다.
import datetime # 각 코드 섹션 다음에 timestamp를 인쇄하여 코드 실행에 걸리는 시간을 확인합니다. first_name = 'Susan' print('task completed') print(datetime.datetime.now()) print() for x in range(0,10): print(x) print('task completed') print(datetime.datetime.now()) print()
이런 반복되는 코드를 함수를 이용해 구현 가능합니다.
반복되는 코드를 함수로 변환
아래 코드와 같이 print_time()이라는 함수를 만들고, 이 함수를 호출해 재활용합니다.
import datetime # 메시지와 현재 시간을 출력하는 print_time이라는 함수를 생성합니다. def print_time(): print('task completed') print(datetime.datetime.now()) print() first_name = 'Susan' # print_time() 함수를 호출해 메시지와 현재 시간을 표시합니다. print_time() for x in range(0,10): print(x) # print_time() 함수를 호출해 메시지와 현재 시간을 표시합니다. print_time()
☑️ 챗GPT 활용: python 함수를 사용하는 이유
함수를 사용할 경우의 장점
코드의 재사용성을 높이는 장점은 기본입니다. 추가적으로,
- 로직 변경 시 코드 변경 최소화
- 버그 발생 가능성을 낮춤
이런 장점들도 함수를 통해 얻을 수 있습니다.
하지만, 함수를 호출할 때 다른 메시지를 출력하고 싶다면 어떻게 해야 할까요? 예를 들어, 아래의 코드와 같은 상황입니다.
from datetime import datetime # 다른 메시지를 표시하려면, 여전히 함수를 사용할 수 있을까요? first_name = 'Susan' print('first name assigned') print(datetime.now()) print() for x in range(0,10): print(x) print('loop completed') print(datetime.now()) print()
이런 경우에는 함수에 파라미터를 전달해 해결 가능합니다.
함수에 파라미터 전달
함수에 인자로 다른 파라미터를 전달하도록 구현할 수 있습니다.
from datetime import datetime # 현재 시간과 작업 이름을 인쇄하는 함수를 생성합니다. # 다음 매개 변수 기능 : # task_name : 출력 시 표시할 작업의 이름 def print_time(task_name): print(task_name) print(datetime.now()) print() first_name = 'Susan' # print_time() 함수를 호출해 메시지와 현재 시간을 표시합니다. # 완료된 task_name을 파라미터로 전달합니다. print_time('first name assigned') for x in range(0,10): print(x) # print_time() 함수를 호출해 메시지와 현재 시간을 표시합니다. # 완료된 작업 이름을 전달합니다. print_time('loop completed')
이렇게, def print_time(task_name) 형식의 task_name을 파라미터로 받아서 처리하고, 함수를 호출하는 부분에서 해당 파라미터에 인자를 넘깁니다. 그럼, 함수의 파라미터를 통해 넘어온 작업 이름이 출력됩니다.
반복되는 로직을 함수로 구현
같은 로직이 계속 반복되는 경우 역시 함수로 구현하는 좋은 패턴입니다.
# 이름을 요청하고 이니셜을 리턴합니다. first_name = input('Enter your first name: ') first_name_initial = first_name[0:1] middle_name = input('Enter your middle name: ') middle_name_initial = middle_name[0:1] last_name = input('Enter your last name: ') last_name_initial = last_name[0:1] print('Your initials are: ' + first_name_initial \ + middle_name_initial + last_name_initial)
이 코드는 계속해서 이름의 이름을 가져와 첫 글자(이니셜)만 출력하는 로직이 반복됩니다. 이러한 패턴 역시 아래처럼 함수로 변경 가능합니다.
이름을 받아 이니셜을 리턴하는 함수
# name을 파라미터로 받고 이름의 첫 글자를 대문자로 리턴하는 get_initial 함수를 생성합니다. # 매개 변수 : # name : 사람의 이름 # 리턴 값 : # 파라미터로 전달된 이름의 첫 글자를 대문자로 리턴 def get_initial(name): initial = name[0:1].upper() return initial # 이름을 입력받고 이니셜을 리턴합니다. first_name = input('Enter your first name: ') # 이름의 이니셜을 가져오기 위해 get_initial 함수를 호출 first_name_initial = get_initial(first_name) middle_name = input('Enter your middle name: ') # 이름의 이니셜을 가져오기 위해 get_initial 함수를 호출 middle_name_initial = get_initial(middle_name) last_name = input('Enter your last name: ') # 이름의 이니셜을 가져오기 위해 get_initial 함수를 호출 last_name_initial = get_initial(last_name) print('Your initials are: ' + first_name_initial \ + middle_name_initial + last_name_initial)
이렇게 get_initial 함수를 생성하고, 코드에서 호출하면, 코드를 더 효율적으로 작성 가능합니다.
만약, 이니셜을 가져올 때, 이니셜을 소문자로 리턴 하고 싶다면, 모든 코드를 변경하지 않고, 위의 get_initial 코드의 upper()만 lower() 변경하면 대문자가 아니라 소문자로 리턴되겠죠.
함수를 사용 추가 팁
정리해 보면, 다음과 같습니다.
- 코드를 더 읽기 쉽고, 관리하기 쉽도록 함수를 항상 염두에 두고 개발하세요.
- 함수의 목적과 파라미터를 설명하는 주석을 항상 추가하세요.
- 함수는 코드에서 사용되기 전에 선언되어야 합니다.
연습문제
아래의 comment를 살펴보고, 이를 코드로 구현하세요. 해결방안은 c9-python-getting-started/code_challenge_solution.py at master · CloudBreadPaPa/c9-python-getting-started (github.com)에서 보실 수 있습니다.
# calculator function 생성 # 함수는 세 개의 파리미터를 입력받습니다. # first_number : 수치 연산을 위한 숫자 값 # second_number : 수치 연산을 위한 숫자 값 # operator : 'add' 또는 'minus'라는 단어 # 함수의 operator 파라미터로 전달된 값에 따라, 더하거나 뺀 두 숫자의 결과를 출력해야 합니다. # 6, 4, add 값으로 함수를 테스트하고, 결과로 10을 출력해야 합니다. # 6, 4, subtract 값으로 함수를 테스트하고, 결과로 2를 출력해야 합니다. # 6, 4, divide 값으로 함수를 테스트하고, 실행 결과는 'invalid values are received' 에러 메시지를 출력해야 합니다.
수고하셨습니다.
파이썬 강좌 책 구매
강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다.
책구매 링크: 챗GPT와 함께하는 파이썬 & 머신러닝 코딩 마스터