IT & Programming/python
파이썬 기본 매개변수(함수전달값)
오스카리
2025. 5. 17. 21:47
파이썬에서 함수 정의 시 사용할 수 있는 기본 매개변수 값(Default Parameter Value) 은
함수를 호출할 때 인자를 생략해도 기본값을 사용하도록 만드는 기능입니다.
이는 함수의 유연성을 높이는 핵심 문법 중 하나입니다. 아래에 개념, 문법, 예제 코드, 작동 방식, 주의사항을 상세하게 설명하겠습니다.
1. 기본 매개변수 값이란?
정의:
함수를 정의할 때 매개변수에 기본값을 설정해두면, 함수 호출 시 그 값을 생략해도
자동으로 기본값을 사용하게 되는 기능입니다.
문법:
def 함수명(매개변수1=기본값1, 매개변수2=기본값2):
...
2. 기본 매개변수 사용 예제
def greet(name, message="안녕하세요"):
print(f"{name}님, {message}")
함수 호출 예
greet("홍길동") # 기본 메시지 사용
greet("김영희", "반갑습니다") # 직접 메시지 지정
출력 결과
홍길동님, 안녕하세요
김영희님, 반갑습니다
3. 작동 원리
- message="안녕하세요" 부분에서 message에 기본값을 할당한 상태
- 만약 greet() 호출 시 message 값을 생략하면 "안녕하세요"가 자동으로 들어감
4. 여러 개의 매개변수 조합
def order(menu, count=1, size="M"):
print(f"{menu} {count}개 - 사이즈: {size}")
사용 예
order("아메리카노") # count=1, size="M"
order("라떼", 2) # size="M" 유지
order("카푸치노", 3, "L") # 모든 매개변수 직접 지정
출력 결과
아메리카노 1개 - 사이즈: M
라떼 2개 - 사이즈: M
카푸치노 3개 - 사이즈: L
5. 주의할 점
1) 기본값은 반드시 뒤에서부터 설정해야 함
잘못된 예:
def test(x=5, y): # 오류 발생
...
오류 메시지:
SyntaxError: non-default argument follows default argument
이유: 기본값이 있는 매개변수 뒤에는 기본값이 없는 매개변수를 둘 수 없음
올바른 예:
def test(y, x=5):
...
2) 기본값으로 mutable 객체 (list, dict 등) 사용 시 주의
예제:
def add_item(item, container=[]):
container.append(item)
return container
이렇게 하면 함수 호출 시마다 list가 공유되어 버그 발생 가능성 있음
수정된 안전한 버전:
def add_item(item, container=None):
if container is None:
container = []
container.append(item)
return container
6. 실전 응용 예제: 이메일 전송 함수
def send_email(to, subject="제목 없음", content="내용이 없습니다."):
print(f"[To] {to}")
print(f"[Subject] {subject}")
print(f"[Content] {content}")
호출 예
send_email("test@example.com")
send_email("user@example.com", content="메일 내용만 보냄")
7. 요약 정리
구분 설명
정의 | 인자를 생략해도 기본값으로 대체 가능 |
위치 | 항상 뒤쪽부터 설정해야 함 |
장점 | 함수 유연성 향상, 인자 생략 허용 |
주의 | list, dict 같은 변경 가능한 객체 기본값 사용 자제 |
아래는 기본 매개변수값과 함께 가변 인자 (*args, **kwargs) 를 사용하는 확장 설명입니다.
이 조합은 실무에서 함수에 전달되는 인자의 수나 형태가 유동적인 경우 매우 유용하게 사용됩니다.
1. 용어 정리
문법 의미 설명
*args | 위치 인자 모음 | 여러 개의 인자를 튜플 형태로 전달받음 |
**kwargs | 키워드 인자 모음 | 여러 개의 키워드 인자를 딕셔너리 형태로 전달받음 |
기본값 | 선택적 인자 처리 | 생략 가능하게 기본값 설정 |
2. 기본값 + *args 사용 예제
함수 정의
def print_items(title="리스트", *items):
print(f"[{title}]")
for item in items:
print(f"- {item}")
호출 예
print_items("장바구니", "사과", "바나나", "오렌지")
print_items("할 일 목록")
출력 결과
[장바구니]
- 사과
- 바나나
- 오렌지
[할 일 목록]
설명
- title은 기본값이 있으며, 필요 시 변경 가능
- *items는 개수 제한 없이 인자를 받을 수 있음 (튜플로 받음)
3. 기본값 + **kwargs 사용 예제
함수 정의
def create_user(name, age=18, **extra_info):
print(f"이름: {name}")
print(f"나이: {age}")
for key, value in extra_info.items():
print(f"{key}: {value}")
호출 예
create_user("홍길동", email="hong@test.com", city="Seoul")
create_user("김영희", age=25, hobby="reading")
출력 결과
이름: 홍길동
나이: 18
email: hong@test.com
city: Seoul
이름: 김영희
나이: 25
hobby: reading
설명
- name은 필수 인자
- age는 기본값 설정
- **extra_info는 키-값 쌍 형태로 확장 인자를 모두 수용
4. 기본값 + *args + **kwargs 혼합 예제
def log_event(event="DEFAULT", *args, **kwargs):
print(f"[이벤트]: {event}")
print("[데이터]:", args)
print("[추가 정보]:", kwargs)
호출 예
log_event("사용자 로그인", "user123", "성공", ip="192.168.0.1", browser="Chrome")
출력 결과
[이벤트]: 사용자 로그인
[데이터]: ('user123', '성공')
[추가 정보]: {'ip': '192.168.0.1', 'browser': 'Chrome'}
5. 함수 정의 시 매개변수 순서 규칙
파이썬 함수 정의에서 매개변수는 반드시 다음 순서를 따라야 합니다:
- 위치 인자 (예: a)
- 기본값 있는 위치 인자 (예: b=1)
- 가변 위치 인자 *args
- 키워드 전용 인자 (예: c → def func(*args, c) 형태로 강제됨)
- 기본값 있는 키워드 인자
- 가변 키워드 인자 **kwargs
예시 (정상적 정의)
def example(a, b=0, *args, c=1, **kwargs):
...
6. 실전 응용 예제: 로그 기록 함수
def save_log(message, level="INFO", *tags, **metadata):
print(f"[{level}] {message}")
if tags:
print("태그:", ", ".join(tags))
if metadata:
print("추가 정보:")
for key, value in metadata.items():
print(f" - {key}: {value}")
호출 예
save_log("사용자 로그인 시도", "WARN", "login", "auth", ip="192.168.0.1", user="admin")
요약 정리
문법 설명 예시
매개변수=기본값 | 기본값 지정 | level="INFO" |
*args | 위치 인자 여러 개 | ("login", "auth") |
**kwargs | 키워드 인자 여러 개 | ip="...", user="..." |
반응형