본문 바로가기

카테고리 없음

4-3. 기본값, 가변 인자 (*args, kwargs)

안녕하세요! 지난 시간에는 함수의 매개변수를 통해 데이터를 입력받고, 리턴값을 통해 결과를 돌려주는 방법을 배웠습니다. 이제 여러분의 함수는 다양한 입력에 반응하고, 그 결과로 다른 작업을 이어갈 수 있게 되었죠!

이번 시간에는 함수의 매개변수를 더욱 유연하게 다루는 세 가지 고급 기법에 대해 알아보겠습니다. 바로 기본값(Default Value) 매개변수, 그리고 정해지지 않은 개수의 위치 인자들을 받는 *args (아스타 args), 정해지지 않은 개수의 키워드 인자들을 받는 **kwargs (더블 아스타 kwargs) 입니다.

이 기능들을 알면 함수를 호출할 때 더 편리해지고, 다양한 상황에 대응할 수 있는 강력한 함수를 만들 수 있습니다.


Part 1: 기본값(Default Value) 매개변수 - 인자를 생략해도 괜찮아!

함수를 정의할 때 특정 매개변수에 기본값을 미리 지정해둘 수 있습니다. 이렇게 하면 함수를 호출할 때 해당 매개변수에 대한 인자를 전달하지 않아도 오류가 발생하지 않고, 기본값이 사용됩니다. 물론 인자를 전달하면 기본값 대신 전달된 인자가 사용됩니다.

1. 기본값 매개변수 정의 및 사용

  • 매개변수 정의 시 매개변수_이름 = 기본값 형태로 지정합니다.
  • 주의: 기본값이 없는 매개변수는 항상 기본값이 있는 매개변수보다 먼저 정의되어야 합니다. (예: def func(a, b=10, c): (X), def func(a, b=10, c=20): (O))

예시: 기본 인사말 함수

Python
 
# 파일 이름: default_parameter.py

def greet(name="방문자"): # name 매개변수에 "방문자"라는 기본값 설정
    print(f"안녕하세요, {name}님!")

# 인자를 전달하지 않고 호출 -> 기본값 사용
greet()

# 인자를 전달하여 호출 -> 전달된 인자 사용
greet("김파이")

# 여러 기본값 매개변수
def show_info(name, age=20, city="서울"):
    print(f"이름: {name}, 나이: {age}, 사는 곳: {city}")

show_info("이코딩") # name만 전달, age와 city는 기본값
show_info("박데이터", 30) # name, age 전달, city는 기본값
show_info("최머신", 25, "부산") # 모든 인자 전달

# 잘못된 순서 (기본값 없는 매개변수는 항상 앞에 와야 합니다)
# def wrong_order(age=20, name): # SyntaxError 발생!
#     pass

 

[VS Code 터미널 출력]

파이썬 함수 기본값 매개변수 사용 예시

Part 2: 가변 인자 *args (Arguments) - 개수 제한 없이 위치 인자 받기

*args는 함수를 호출할 때 매개변수의 개수가 정해지지 않았을 경우에 유용하게 사용됩니다. * (별표)와 함께 매개변수 이름을 사용하면, 전달되는 모든 위치 인자(순서대로 전달되는 인자)들이 하나의 **튜플(Tuple)**로 묶여 함수 내부로 전달됩니다.

1. *args 사용법

기본 형식:

Python
 
def 함수이름(*args_이름):
    # args_이름은 튜플이 됩니다.
    # for 문 등으로 튜플의 요소를 순회하며 사용

예시: 여러 숫자를 더하는 함수

Python
 
# 파일 이름: star_args.py

def add_all_numbers(*numbers): # *numbers는 여러 인자를 튜플로 받습니다.
    total = 0
    for num in numbers:
        total += num
    print(f"총 합: {total}")

add_all_numbers(1, 2)           # 2개의 인자 전달
add_all_numbers(10, 20, 30, 40) # 4개의 인자 전달
add_all_numbers(5)              # 1개의 인자 전달
add_all_numbers()               # 인자 없이 호출 (빈 튜플 전달)

# 일반 매개변수와 *args 함께 사용
def describe_items(category, *items):
    print(f"카테고리: {category}")
    print("아이템 목록:")
    if items: # items 튜플이 비어있지 않다면
        for item in items:
            print(f"- {item}")
    else:
        print("  아이템이 없습니다.")

describe_items("과일", "사과", "바나나", "체리")
describe_items("전자제품")

 

[VS Code 터미널 출력]

파이썬 함수 가변 인자 *args 사용 예시

 


Part 3: 가변 인자 **kwargs (Keyword Arguments) - 개수 제한 없이 키워드 인자 받기

**kwargs는 함수를 호출할 때 매개변수의 개수가 정해지지 않았을 경우, 특히 키=값 형태의 **키워드 인자(Keyword Argument)**들을 받을 때 유용합니다. ** (별표 두 개)와 함께 매개변수 이름을 사용하면, 전달되는 모든 키워드 인자들이 하나의 **딕셔너리(Dictionary)**로 묶여 함수 내부로 전달됩니다.

1. **kwargs 사용법

기본 형식:

Python
 
def 함수이름(**kwargs_이름):
    # kwargs_이름은 딕셔너리가 됩니다.
    # kwargs_이름.items() 등으로 딕셔너리의 키와 값을 사용

예시: 사용자 정보 출력 함수

Python
 
# 파일 이름: star_star_kwargs.py

def print_user_profile(**profile_info): # **profile_info는 여러 키워드 인자를 딕셔너리로 받습니다.
    print("--- 사용자 프로필 ---")
    if profile_info:
        for key, value in profile_info.items():
            print(f"{key.replace('_', ' ').capitalize()}: {value}") # 가독성을 위해 키 변환
    else:
        print("프로필 정보가 없습니다.")

print_user_profile(name="김아름", age=28, city="부산")
print_user_profile(user_id="U001", status="active", department="IT")
print_user_profile() # 인자 없이 호출

# 일반 매개변수, *args, **kwargs 함께 사용 (순서 중요!)
def comprehensive_function(pos1, pos2, *args, default_param="기본값", **kwargs):
    print(f"\npos1: {pos1}, pos2: {pos2}")
    print(f"args: {args}")
    print(f"default_param: {default_param}")
    print(f"kwargs: {kwargs}")

comprehensive_function(10, 20, 1, 2, 3, key1="value1", key2=True, default_param="새로운값")
comprehensive_function("첫째", "둘째", greeting="안녕", mood="좋음")
  • profile_info는 name='김아름', age=28 등의 키워드 인자들을 {'name': '김아름', 'age': 28}과 같은 딕셔너리로 받습니다.
  • key.replace('_', ' ').capitalize(): 딕셔너리 키는 관례적으로 소문자 밑줄로 작성하지만, 출력 시에는 보기 좋게 변환하는 예시입니다.

 

[VS Code 터미널 출력]

파이썬 함수 가변 인자 **kwargs 사용 예시

Part 4: 매개변수 순서의 중요성

함수를 정의할 때 매개변수들을 배치하는 순서가 매우 중요합니다. 파이썬은 이 순서에 따라 인자를 매개변수에 할당합니다.

일반적인 매개변수 정의 순서 (권장):

  1. 위치 매개변수 (Positional Parameters): 필수적으로 값을 받아야 하는 매개변수 (기본값 없음)
  2. *args (위치 가변 인자): 정해지지 않은 개수의 위치 인자를 받음
  3. 기본값 매개변수 (Default Value Parameters): 기본값을 가진 매개변수
  4. **kwargs (키워드 가변 인자): 정해지지 않은 개수의 키워드 인자를 받음

예시 (올바른 순서):

Python
 
# 파일 이름: parameter_order.py

def example_func(a, b, *args, x=10, y=20, **kwargs):
    print(f"a: {a}, b: {b}")
    print(f"args: {args}")
    print(f"x: {x}, y: {y}")
    print(f"kwargs: {kwargs}")

example_func(1, 2)
example_func(1, 2, 3, 4, z=50, x=100) # x는 기본값 덮어씀
example_func(5, 6, 7, name="Alice", city="New York", x=99)

 

[VS Code 터미널 출력]

파이썬 함수 매개변수 정의 순서 예시

마무리하며

이번 시간에는 파이썬 함수의 매개변수를 더욱 유연하게 다루는 기본값 매개변수, 가변 위치 인자 *args, 그리고 **가변 키워드 인자 **kwargs**에 대해 알아보았습니다.

  • 기본값: 인자를 생략해도 되게 하여 함수 호출을 편리하게 합니다.
  • *args: 정해지지 않은 개수의 위치 인자를 튜플로 받습니다.
  • **kwargs: 정해지지 않은 개수의 키워드 인자를 딕셔너리로 받습니다.

이 기능들을 활용하면 다양한 상황에 대응할 수 있는 범용적인 함수를 만들 수 있으며, 이는 파이썬에서 매우 중요하게 사용되는 기법들입니다.

다음 포스팅에서는 파이썬에서 짧고 간결한 함수를 만들 때 유용한 람다(lambda) 함수에 대해 알아보겠습니다.


궁금한 점이 있다면 언제든지 질문해주세요! 다음 포스팅에서 만나요!

반응형