Application/Python

[Python] 파이썬 함수 심화 - 매개변수와 기본값 한 번에 정리

devsalix 2026. 4. 28. 11:58
728x90

파이썬 함수 심화 - 매개변수와 기본값 한 번에 정리

지난 글에서 함수 만드는 법을 익히셨는데, 막상 써보니까 좀 귀찮은 부분이 있지 않으셨나요?

호출할 때마다 인자를 전부 다 넣어줘야 하고, 순서도 정확히 맞춰야 하고. 하나라도 빼먹으면 빨간 에러가 떡하니 뜨고요. 저도 처음엔 "함수가 편하다더니 이게 뭐야" 싶었거든요.

근데 파이썬은 이걸 훨씬 유연하게 호출하는 방법을 마련해뒀어요. 오늘은 그 얘기를 해볼게요.


매개변수와 인자, 용어부터 가볍게

자주 헷갈리는 두 단어부터 정리할게요.

  • 매개변수(parameter): 함수를 정의할 때 괄호 안에 적는 이름
  • 인자(argument): 함수를 호출할 때 실제로 넣는 값
def greet(name):       # name은 매개변수
    print(f"안녕, {name}")

greet("지훈")           # "지훈"은 인자

 

솔직히 둘을 엄격히 구분 안 하고 그냥 "함수에 넣는 거"라고 이해하셔도 코딩하는 데는 지장 없어요. 다만 책이나 에러 메시지에서 이 단어들이 튀어나올 때 당황만 안 하시면 됩니다.


python 기본값으로 함수 호출 줄이기

이제 본론이에요. 기본값 매개변수라는 녀석입니다.

매개변수에 미리 값을 정해두면, 호출할 때 안 넘겨도 알아서 그 값을 쓰는 기능이거든요.

def greet(name, greeting="안녕"):    # greeting에 기본값 지정
    print(f"{greeting}, {name}님!")

greet("지훈")                         # 기본값 "안녕" 사용
greet("민지", "반가워요")             # 기본값 대신 "반가워요"

 

실행 결과:

안녕, 지훈님!
반가워요, 민지님!

 

별거 아닌 것 같아도 막상 써보면 진짜 편해요. 자주 쓰는 값을 기본으로 깔아두고, 필요할 때만 바꿔주면 되거든요.


키워드 인자 - 카페 주문서처럼 부르기

함수 호출을 카페 주문에 비유해볼게요.

"아메리카노 라지 핫" 이렇게 순서대로 외치는 게 위치 인자예요. 빠르긴 한데 순서를 헷갈리면 망해요.

반대로 "메뉴는 아메리카노, 사이즈는 라지, 온도는 따뜻하게요"라고 하나씩 짚어 부르는 게 키워드 인자고요.

def book_room(date, name, people=1):
    print(f"{date}에 {name}님 {people}명 예약")

# 매개변수 이름을 직접 지정해서 전달
book_room(name="지훈", date="2026-05-01", people=2)

 

실행 결과:

2026-05-01에 지훈님 2명 예약

 

매개변수 이름을 직접 적으니까 순서를 바꿔도 잘 작동하잖아요. 그리고 코드를 나중에 다시 봤을 때 "이 값이 뭐였더라" 하는 일도 줄어들어요.


위치와 키워드 섞어 쓰기

둘을 섞어 쓰는 것도 가능합니다. 단, 위치 인자가 먼저, 키워드 인자가 뒤에 와야 해요.

def order(menu, size="미디엄", temp="hot"):
    print(f"{menu} / {size} / {temp}")

order("아메리카노")                    # 기본값만 사용
order("라떼", size="라지")             # 일부만 키워드로
order("녹차", temp="ice", size="스몰") # 키워드끼리는 순서 무관

args, *kwargs 맛보기

가끔 인자를 몇 개 받을지 모를 때가 있어요. 그럴 때 쓰는 게 *args**kwargs입니다.

이름 앞에 별 하나가 붙으면 위치 인자를 묶어서 받아요.

def sum_all(*nums):              # 들어온 값들이 nums에 튜플로 묶임
    return sum(nums)

print(sum_all(1, 2, 3))          # 6
print(sum_all(10, 20, 30, 40))   # 100

 

별 두 개가 붙으면 키워드 인자들을 딕셔너리로 받고요.

def print_info(**info):              # 키=값 쌍이 info에 딕셔너리로 묶임
    for key, value in info.items():
        print(f"{key}: {value}")

print_info(이름="지훈", 나이=25, 도시="서울")

 

args, kwargs라는 이름은 그냥 관습이에요. *nums, **options 이런 식으로 자유롭게 지어도 돼요. 핵심은 별이 한 개냐 두 개냐, 그거예요.


처음에 자주 하는 실수

기본값 매개변수는 뒤로 몰아주세요

def func(a=1, b):   # SyntaxError!
    pass

 

기본값이 있는 매개변수 뒤에 일반 매개변수가 오면 에러가 나요. "기본값은 뒤쪽에 모아둔다", 이거 하나만 기억하시면 됩니다.


가변 기본값 함정

이건 좀 무서운 함정인데, 한 번은 짚고 가야 해요.

def add_item(item, basket=[]):   # 위험!
    basket.append(item)
    return basket

 

이렇게 빈 리스트 []를 기본값으로 쓰면, 호출할 때마다 같은 리스트가 재사용되면서 결과가 누적돼요. 처음 보면 "이게 왜 이래?" 싶으실 거예요.

해결법은 간단합니다. 기본값으로 빈 리스트나 빈 딕셔너리 대신 None을 쓰고, 함수 안에서 새로 만들어주세요.

def add_item(item, basket=None):
    if basket is None:
        basket = []          # 호출할 때마다 새로 만들기
    basket.append(item)
    return basket

 

원리까지 깊게 파고들지 않아도 괜찮아요. "리스트 기본값은 위험하다, None 쓰자" 이거 하나만 기억해두세요.


실습 과제

영수증 출력 함수를 직접 만들어보세요.

def print_receipt(customer, *items, **options):
    print(f"--- {customer}님 영수증 ---")
    for item in items:                 # *items: 메뉴들이 튜플로
        print(f"- {item}")
    if options:                        # **options: 옵션이 딕셔너리로
        print("[옵션]")
        for key, value in options.items():
            print(f"{key}: {value}")

print_receipt("지훈", "아메리카노", "치즈케이크", 결제="카드", 포인트적립=True)

 

직접 돌려보시고 메뉴 개수를 늘려보거나 옵션을 더 추가해보세요. 별 한 개와 별 두 개의 차이가 손으로 익혀질 거예요.


함수를 좀 더 유연하게 다룰 수 있게 됐죠? 이제 함수 하나도 꽤 똑똑하게 만들 수 있어요.

근데 사실 좋은 함수는 굳이 우리가 다 만들 필요가 없어요. 이미 다른 사람이 만들어둔 좋은 함수가 엄청 많거든요. 다음 글에서는 그걸 가져다 쓰는 방법, 즉 모듈과 import를 다뤄볼게요. 파이썬이 왜 그렇게 강력한지 그때부터 진짜 체감하실 거예요.


 


제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀

 

 
728x90