안녕하세요. SQLER의 코난 김대우입니다. 

이번 강좌에서는, Python 초급 강좌 목차 - 14. 함수 파라미터(Parameter)를 진행토록 하겠습니다.

 

SQLER에서 진행되는 전체 Python / 머신러닝 강좌 목록

 

코드를 실행하기 위해서는, vscode에서 새로운 파일을 만들고 실행하시면 됩니다.

예를 들어, 14_parameter.py를 생성하고 코드를 실행합니다.

 

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' 에러 메세지를 출력해야 합니다.

 

수고하셨습니다. 

 

참조링크

개발자 커뮤니티 SQLER.com - Python 무료 강좌 - 기초, 중급, 머신러닝

c9-python-getting-started/python-for-beginners/14 - Function parameters at master · CloudBreadPaPa/c9-python-getting-started (github.com)

No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 2134
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2021년 1월 업데이트) 코난(김대우) 2021.01.01 1204
96 Python 중급 강좌 - 2. 람다(Lamda) file 코난(김대우) 2021.01.03 299
95 Python 중급 강좌 - 1. Python 스타일 가이드: 서식(Formatting)과 린팅(Linting) file 코난(김대우) 2021.01.02 547
94 Python 초급 강좌 목차 - 19. 코드에서 중요한 키(패드워드) 관리 - dotenv 코난(김대우) 2021.01.02 541
93 Python 초급 강좌 목차 - 18. 데코레이터(Decorators) 코난(김대우) 2021.01.02 190
92 Python 초급 강좌 목차 - 17. JSON 데이터 처리 file 코난(김대우) 2021.01.02 501
91 Python 초급 강좌 목차 - 16. 외부 웹서비스 API 호출 file 코난(김대우) 2021.01.02 613
90 Python 초급 강좌 목차 - 15. 패키지(Package): import, pip 코난(김대우) 2021.01.02 172
» Python 초급 강좌 목차 - 14. 함수 파라미터(Parameter) 코난(김대우) 2021.01.02 169
88 Python 초급 강좌 목차 - 13. 함수(Function) 코난(김대우) 2021.01.02 237
87 Python 초급 강좌 목차 - 12. 반복문(Loop): for, while 코난(김대우) 2021.01.02 138
86 Python 초급 강좌 목차 - 11. 컬렉션(Collection): list, array, dictionary file 코난(김대우) 2021.01.02 179
85 Python 초급 강좌 목차 - 10. 조건문(Condition):3 복잡한 조건 처리 코난(김대우) 2021.01.01 154
84 Python 초급 강좌 목차 - 9. 조건문(Condition):2 다중 조건 처리 코난(김대우) 2021.01.01 177
83 Python 초급 강좌 목차 - 8. 조건문(Condition):1 (IF-ELSE) 코난(김대우) 2021.01.01 171
82 Python 초급 강좌 목차 - 7. 에러 핸들링(Error Handling) file 코난(김대우) 2021.01.01 186
81 Python 초급 강좌 목차 - 6. 날짜와 시간 데이터 처리 코난(김대우) 2021.01.01 204
80 Python 초급 강좌 목차 - 5. 숫자(Numeric) 데이터 처리 코난(김대우) 2021.01.01 153
79 Python 초급 강좌 목차 - 4. 문자열(String) 데이터 처리 코난(김대우) 2021.01.01 197
78 Python 초급 강좌 목차 - 3. 주석(Comments) 코난(김대우) 2021.01.01 170
77 Python 초급 강좌 목차 - 2. Print 구문 file 코난(김대우) 2021.01.01 289





XE Login