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으로 자동 매핑됨
- 키워드 인수이기에 반드시 키워드와 매핑해서 전달되어야 됨
- * 전에 오는 매개변수: _func
- 해당 함수가 호출될 수 있는 방법과 호출될 수 없는 방법:
# 호출 가능한 방법
@retry
def my_function():
...
@retry(count=5)
def my_function():
...
# 에러
@retry(5) # 오류 발생
def my_function():
...
- 설명:
- count 인수를 위치 인수로 전달하려고 하기 때문에 오류 발생
- → *를 사용하면 키워드 전용 인수를 명확하게 구분하고 강제할 수 있음
참조
- (01 매개변수 및 인자/인수): https://blog.naver.com/youndok/222174684325
- (02 인수의 종류): https://blog.naver.com/youndok/222174684325
'Python > 기본문법' 카테고리의 다른 글
f.tell() (파이썬 파일 처리 함수) (0) | 2024.08.09 |
---|---|
f.seek() (파이썬 파일 처리 함수) (0) | 2024.08.09 |
pass continue break 차이 (파이썬 문법) (0) | 2024.08.01 |
namedtuple (파이썬 자료형) (0) | 2024.07.31 |
dictionary란 (파이썬 자료구조) (0) | 2024.07.25 |