안녕하세요. SQLER의 코난 김대우입니다.
이번 강좌에서는, Python 초급 강좌 목차 - 14. 함수 파라미터(Parameter)를 진행토록 하겠습니다.
SQLER에서 진행되는 전체 Python / 머신러닝 강좌 목록
코드를 실행하기 위해서는, vscode에서 새로운 파일을 만들고 실행하시면 됩니다.
예를 들어, 14_parameter.py를 생성하고 코드를 실행합니다.
TL;DR
지난 Python 함수 챕터에 이어 더 다양한 함수 사용 방법과 효율적인 함수 파라미터 전달, 파라미터 위치지정, 명명된 표기법, 주석 표기 등 여러 함수 활용 방안을 소개합니다.
Python 초급 강좌 목차 - 14. 함수 파라미터(Parameter)
함수를 사용하면 반복되는 코드를 가져와 필요할 때, 호출할 수 있는 모듈로 재사용할 수 있습니다. 함수는 def
키워드로 정의되며, 코드에서 함수가 호출되기 전에 선언되어야 합니다. 함수는 파라미터(parameter-매개 변수)를 사용할 수 있고, 값을 리턴할 수 있습니다.
함수 파라미터(Function parameters)
아래와 같은 패턴으로 함수와 파라미터를 선언합니다.
# 예시 코드입니다 def function_name(parameter): # 실행할 코드 return value
함수 파라미터 기본값
매개 변수에 기본값(default value)을 할당하여 함수가 호출될 때 선택 사항으로 지정할 수 있습니다.
# 예시 코드입니다 def function_name(parameter=default): # 실행할 코드 return value
함수 파라미터 위치지정 또는 명명된 표기법 사용
함수를 호출할 때 위치를 지정해 표기(Positional notation)하거나 명명된 표기법(named notation)을 사용하여 파라미터 값을 지정할 수 있습니다.
# 예시 코드입니다 def function_name(parameter1, parameter2): # 실행할 코드 return value # 위치 지정 표기법(Positional notation)은 파라미터가 선언된 것과 같은 순서로 인자값을 전달합니다. result = function_name(value1,value2) # 명명된 표기법(Named notation) result = function_name(parameter1=value1, parameter2=value2)
함수 파라미터 전달 코드
지난 함수 강좌에서 이미, 파라미터를 함수에 전달하고 리턴되는 결과를 받아 처리하는 예제를 공부했습니다.
# name을 파라미터로 받고 이름의 첫 글자를 대문자로 리턴하는 함수를 생성합니다. # 매개 변수 : # 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) print('Your initial is: ' + first_name_initial)
여러 파라미터를 함수에 전달
함수에 1개 이상의 파라미터를 전달 가능합니다. 아래의 코드처럼 이름과, 강제로 대문자로 변환할지 여부를 파라미터로 전달할 수 있으며, 파라미터 설정 순서에 따라 전달해야 합니다.
# 이름의 첫 이니셜을 리턴하는 함수를 생성합니다. # 매개 변수 : # name : 사람의 이름 # force_uppercase : 이니셜을 대문자로 표시할지 여부를 설정합니다. # 리턴 값 : # 파라미터로 전달된 이름의 첫 글자를 대문자로 리턴 def get_initial(name, force_uppercase): if force_uppercase: initial = name[0:1].upper() else: initial = name[0:1] return initial # 이름을 입력받아 이니셜을 리턴합니다. first_name = input('Enter your first name: ') # 이름을 입력받아 이니셜을 리턴합니다. first_name_initial = get_initial(first_name, False) print('Your initial is: ' + first_name_initial)
이렇게 "force_uppercase" 파라미터를 이용해 조건에 따라 대문자 이니셜을 리턴할지 결정할 수 있습니다.
함수 파라미터에 기본값 설정
아래 코드와 같이, 함수의 파라미터에 기본값을 함께 전달할 수 있습니다.
# name을 파라미터로 받고 이름의 첫 글자를 대문자로 리턴하는 함수를 생성합니다. # 매개 변수 : # name : 사람의 이름 # force_uppercase : 이니셜을 대문자로 표시할지 여부를 설정하고, 기본값은 True입니다. # 리턴 값 : # 파라미터로 전달된 이름의 첫 글자를 대문자로 리턴 def get_initial(name, force_uppercase=True): # 파라미터 기본값 전달 if force_uppercase: initial = name[0:1].upper() else: initial = name[0:1] return initial # 이름을 입력받고 이니셜을 리턴합니다. first_name = input('Enter your first name: ') # get_initial 함수를 호출하지만, force_uppercase 값을 전달하지 않아 기본값이 사용됩니다. first_name_initial = get_initial(first_name) print('Your initial is: ' + first_name_initial)
force_uppercase=True으로 기본값을 적용해 함수를 처리하면, 코드 부분에서 함수에 파라미터를 전달하지 않아도, 기본값이 설정되어 함수가 실행됩니다.
명시적으로 함수 인자값을 지정
함수를 호출할 때, 인자를 이름과 함께 전달하면, 좀 더 명확하게 함수의 파라미터를 전달 가능합니다.
# 이름의 이니셜을 리턴하는 함수를 생성합니다. # 매개 변수 : # name : 사람의 이름 # force_uppercase : 이니셜을 항상 대문자로 표시할지 여부를 설정합니다. # 리턴 값 : # 파라미터로 전달된 이름의 첫 글자를 대문자로 리턴 def get_initial(name, force_uppercase): if force_uppercase: initial = name[0:1].upper() else: initial = name[0:1] return initial # 이름을 입력받아 이니셜을 리턴합니다. first_name = input('Enter your first name: ') # get_initial을 호출해 이름의 첫 이니셜을 가져옵니다. # 명시적으로 파라미터를 전달해 사용하면 순서에 관계없이 파라미터를 지정할 수 있습니다. first_name_initial = get_initial(force_uppercase=True, \ name=first_name) print('Your initial is: ' + first_name_initial)
이렇게, 명시적으로 파라미터를 전달하면, 순서와 무관하게 파라미터를 지정할 수 있습니다.
더 읽기 쉬운 코드를 위한 함수와 파라미터, 그리고, 인자값 전달
예를 들어, 다음과 같이 여러 파라미터를 받는 error_logger라는 함수가 있다면, 함수를 호출하는 것도 쉽지 않고, 에러가 발생할 확률이 높아집니다.
# 코드 실행 중에 발생하는 오류를 처리하는 함수를 생성하면, # 사용자에게 메시지가 표시되고 오류를 기록해 디버깅에 도움이 될 수 있습니다. # 파라미터 : # error_code : 각각의 오류 유형에 할당된, 고유한 오류 코드. 예시) "45"는 데이터형 변환 오류입니다. # error_severity : 0 - 치명적인(fatal) 오류가 발생하지 않아야 합니다. # 1 - 심각한(severe) 오류 코드로 인해 계속 진행할 수 없습니다. # 2 - 경고(warning) 코드는 계속 진행될 수 있지만, 정보가 누락될 수 있습니다 # log_to_db : 이 오류가 데이터베이스에 기록되어야 하는지를 여부를 설정합니다. # error_message : 사용자에게 표시하고 데이터베이스에 입력할, 오류 메시지 # source_module : 오류를 생성 한 Python 모듈의 이름 def error_logger(error_code, error_severity, log_to_db, error_message, source_module): print('oh no error: ' + error_message) # 오류를 데이터베이스 또는 파일에 기록하는 코드가 있다고 가정합니다. first_number = 10 second_number = 5 if first_number > second_number: # 이 함수 호출 패턴을 즉각적으로 이해하기 어렵습니다. # 이해하려면 error_logger 함수의 정의를 찾아서 살펴봐야 합니다. error_logger(45,1,True,'Second number greater than first','adding_method') if first_number > second_number: # 이 함수 호출은 전달하는 값이 함수의 파라미터에 매핑되는 방식으로 볼 수 있으므로, # 이해하기 더 쉽습니다. error_logger(error_code=45, error_severity=1, log_to_db=True, error_message='Second number greater than first', source_module='adding_method')
이런 패턴으로, 함수 파라미터 호출 시 인자값과 파라미터 이름을 명시적으로 사용해 코드를 읽기 쉽게 구성할 수 있으며, 아래처럼 인덴트(들여 쓰기)를 구성하면 더 읽기 쉬운 코드로 함수를 호출할 수 있습니다.
두세 개 이상의 파라미터를 전달하는 함수라면, 꼭 이렇게 명시적으로 파라미터를 전달할 것을 권장해 드립니다.
연습문제
아래의 comment를 살펴보고, 이를 코드로 구현하세요. 해결방안은 c9-python-getting-started/code_challenge_solution.py at master · CloudBreadPaPa/c9-python-getting-started (github.com)에서 보실 수 있습니다.
# calculator 함수 생성 # 함수는 세 개의 파라미터를 받습니다. # first_number : 수치 연산을 위한 숫자 값 # second_number : 수치 연산을 위한 숫자 값 # operator : 'add' 또는 'subtract'라는 단어를 입력받고, 기본 값은 'add'입니다. # 함수는 operator로 전달된 파라미터에 따라 더하거나 뺀 두 숫자의 결과를 리턴해야 합니다. # 6, 4 값으로 함수를 테스트하고, 결과로 10을 출력해야 합니다. # 6, 4, subtract 값으로 함수를 테스트하고, 결과로 2를 출력해야 합니다. # 6, 4, divide 값으로 함수를 테스트하고, 실행 결과는 'invalid values are received' 에러 메시지를 출력해야 합니다.
수고하셨습니다.
파이썬 강좌 책 구매
강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다.
책구매 링크: 챗GPT와 함께하는 파이썬 & 머신러닝 코딩 마스터