본문 바로가기
Python/기본문법

위치 인수, 키워드 인수 (파이썬 함수의 인수 종류)

by yororing 2024. 8. 4.

00 개요

  • 코드 분석 도중 def retry(_func=None, *, count=3): 라는 코드를 봤는데, *의 의미를 찾다보니 함수 정의에서 매개변수의 위치 인수 및 키워드 인수를 구분하는 역할을 한다고 하여 위치 인수 및 키워드 인수의 개념부터 정리하고자 함

01 매개변수 및 인자/인수 (Parameter and Arguments)

  • 참조:
  • 간단한 정의
    • 매개변수 (Parameter): 함수 정의 시 () 안에 지정하는 이름
    • 인자 또는 인수 (Argument): 함수 호출 시 매개변수로 전달되는 실제 값 
  • 예시:
def add(x, y):       # x, y -> add 함수의 매개변수
    return x + y

a = 2
b = 3
add(a, b)           # a, b, 2, 3 -> add 함수의 인자/인수
add(2, 3)

 

02 인수의 종류

1. 위치 인수 (Positional Argument)

1) 정의

  • 함수 내 인수 전달이 인수의 위치/순서에 의해 이뤄지는 인수

2) 예시

def str_make(x, y, z):
    result_string = str(x) + str(y) + str(z)
    return result_string
    
>>> str_make(1, 2, 4)
'124'
>>> str_make(0, 6, 3)
'063'
>>> str_make('a', 'p', 'c')
'apc'
  • 설명:
    • x, y, z는 해당 위치에 오는 인자(1, 2, 4)와 매핑되어 연산이 됨

2. 키워드 인수 (Keyword Argument)

1) 정의

  • 함수 내 인수 전달이 인수의 키워드/변수명에 의해 이뤄지는 인수

2) 예시

def str_make(x, y, z):
    result_string = str(x) + str(y) + str(z)
    return result_string

>>> str_make(x = 1, y = 2, z = 3)
'123'
>>> str_make(y = 'a', x = 2, z = 3)
'2a3'
  • 설명
    • str_make 함수를 호출 시 각 매개변수 (x, y, z)에 =을 뒤에 인수(1, 2, 3 및 'a', 2, 3)를 붙여주므로서 지정된 매개변수에 =로 매핑된 각 인수들을 키워드 인수라 칭함 
    • 순서와 무관하게 매개변수명으로 정의한 것

03 위치 및 키워드 인수 정의하기

1. 함수의 ()에 * 사용하여 위치/키워드 인수 구분하여 정의하기

1) 정의/설명

  • 함수 정의 시, () 안에 *를 사용하여 위치 인수와 키워드 저용 인수를 구분할 수 있음
  • * 전에 오는 매개변수들은 위치 인수, * 후에 오는 매개변수들은 키워드 인수

2) 예시

def retry(_func=None, *, count=3):     ### 여기 봐야됨!!
    def decorator_retry(func):
        def wrapper(*args, **kwargs):
            for i in range(count):
                try:
                    return func(*args, **kwargs)
                except Exception as e:
                    print(f"Attempt {i+1} failed: {e}")
            print(f"All {count} attempts failed.")
        return wrapper

    if _func is None:
        return decorator_retry
    else:
        return decorator_retry(_func)
  • 설명 ( def retry(_func=None, *, count=3): 줄에서 *의 역할 ):
    • * 전에 오는 매개변수: _func
      • 초기값 = None을 가진 위치 인수 → 해당 매개변수에 인수값을 안 넣어주면 None으로 자동 매핑됨
      • 위치 인수이기에 키워드 매핑을 안 해도 retry() 안에 인수를 넣으면 자동으로 _func 매개변수로 전달됨
    • * 후에 오는 매개변수: count
      • 초기값 = 3을 가진 키워드 전용 인수 → 해당 매개변수에 인수값을 안 넣어주면 3으로 자동 매핑됨
      • 키워드 인수이기에 반드시 키워드와 매핑해서 전달되어야 됨
  • 해당 함수가 호출될 수 있는 방법과 호출될 수 없는 방법:
# 호출 가능한 방법
@retry
def my_function():
    ...

@retry(count=5)
def my_function():
    ...
    
# 에러
@retry(5)  # 오류 발생
def my_function():
    ...
  • 설명:
    • count 인수를 위치 인수로 전달하려고 하기 때문에 오류 발생 
    • → *를 사용하면 키워드 전용 인수를 명확하게 구분하고 강제할 수 있음

참조

  1. (01 매개변수 및 인자/인수): https://blog.naver.com/youndok/222174684325
  2. (02 인수의 종류): https://blog.naver.com/youndok/222174684325
  3.