PHpullh
학습 라이브러리/Python/함수 정의 & *args & **kwargs

PYTHON · 함수

함수 정의 & *args & **kwargs

가변 인자와 키워드 인자로 유연한 함수를 설계합니다.

함수입문*args**kwargs기본값/*

핵심 설명

가변 인자와 키워드 인자로 유연한 함수를 설계합니다.

Python code

# 기본 함수
def add(a: int, b: int) -> int:
    return a + b

# 기본값 파라미터
def greet(name: str, prefix: str = "안녕하세요") -> str:
    return f"{prefix}, {name}!"

# *args — 가변 위치 인자 (튜플로 받음)
def sum_all(*nums: int) -> int:
    return sum(nums)

print(sum_all(1, 2, 3, 4, 5))  # 15

# **kwargs — 가변 키워드 인자 (딕셔너리로 받음)
def create_user(name: str, **attrs) -> dict:
    return {"name": name, **attrs}

user = create_user("Alice", age=30, role="admin")
# {'name': 'Alice', 'age': 30, 'role': 'admin'}

# / 와 * 파라미터 구분자 (Python 3.8+)
def strict(pos_only: int, /, normal: str, *, kw_only: bool):
    pass

# pos_only는 위치 전용, kw_only는 키워드 전용
strict(1, "hi", kw_only=True)

# Unpacking
nums = [1, 2, 3]
print(sum_all(*nums))              # 15
cfg = {"age": 25, "role": "user"}
print(create_user("Bob", **cfg))

학습 팁

함수 시그니처에서 / 앞은 위치 전용, * 뒤는 키워드 전용 파라미터입니다. API 설계 시 명확성을 높입니다.

주의할 점

기본값에 가변 객체(list, dict)를 쓰면 모든 호출이 같은 객체를 공유합니다. def f(items=[]):def f(items=None): items = items or []로 작성하세요.

자주 묻는 질문

함수 정의 & *args & **kwargs란 무엇인가요?

가변 인자와 키워드 인자로 유연한 함수를 설계합니다.

함수 정의 & *args & **kwargs 학습 시 주의할 점은 무엇인가요?

기본값에 가변 객체(list, dict)를 쓰면 모든 호출이 같은 객체를 공유합니다. def f(items=[]): → def f(items=None): items = items or [] 로 작성하세요.