안녕하세요. 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와 함께하는 파이썬 & 머신러닝 코딩 마스터 

파이썬-책구매링크.png

 

참조링크

개발자 커뮤니티 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 SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 41476
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 22478
98 Python 중급 강좌 - 4. 상속(Inheritance) 코난(김대우) 2021.01.03 403
97 Python 중급 강좌 - 3. 클래스(Class) 코난(김대우) 2021.01.03 455
96 Python 중급 강좌 - 2. 람다(Lamda) file 코난(김대우) 2021.01.03 568
95 Python 중급 강좌 - 1. Python 스타일 가이드: 서식(Formatting)과 린팅(Linting) file 코난(김대우) 2021.01.02 1177
94 Python 초급 강좌 목차 - 19. 코드에서 중요한 키(패스워드) 관리 - dotenv 코난(김대우) 2021.01.02 1007
93 Python 초급 강좌 목차 - 18. 데코레이터(Decorators) 코난(김대우) 2021.01.02 365
92 Python 초급 강좌 목차 - 17. JSON 데이터 처리 file 코난(김대우) 2021.01.02 838
91 Python 초급 강좌 목차 - 16. 외부 웹서비스 API 호출 file 코난(김대우) 2021.01.02 968
90 Python 초급 강좌 목차 - 15. 패키지(Package): import, pip 코난(김대우) 2021.01.02 425
» Python 초급 강좌 목차 - 14. 함수 파라미터(Parameter) 코난(김대우) 2021.01.02 439
88 Python 초급 강좌 목차 - 13. 함수(Function) 코난(김대우) 2021.01.02 557
87 Python 초급 강좌 목차 - 12. 반복문(Loop): for, while 코난(김대우) 2021.01.02 383
86 Python 초급 강좌 목차 - 11. 컬렉션(Collection): list, array, dictionary file 코난(김대우) 2021.01.02 338
85 Python 초급 강좌 목차 - 10. 조건문(Condition):3 복잡한 조건 처리 코난(김대우) 2021.01.01 368
84 Python 초급 강좌 목차 - 9. 조건문(Condition):2 다중 조건 처리 코난(김대우) 2021.01.01 430
83 Python 초급 강좌 목차 - 8. 조건문(Condition):1 (IF-ELSE) 코난(김대우) 2021.01.01 377
82 Python 초급 강좌 목차 - 7. 에러 핸들링(Error Handling) file 코난(김대우) 2021.01.01 362
81 Python 초급 강좌 목차 - 6. 날짜와 시간 데이터 처리 코난(김대우) 2021.01.01 405
80 Python 초급 강좌 목차 - 5. 숫자(Numeric) 데이터 처리 코난(김대우) 2021.01.01 332
79 Python 초급 강좌 목차 - 4. 문자열(String) 데이터 처리 코난(김대우) 2021.01.01 449





XE Login