함수 입력값 쉽게 익히기

앞에서는 함수가 반복되는 코드를 한곳에 모아 다시 쓰게 해 준다고 이야기했죠. 그런데 함수가 늘 같은 일만 하면 조금 심심합니다. 이름을 바꾸거나, 계산할 숫자를 바꾸거나, 인사말을 다르게 하고 싶을 때가 있어요. 그때 함수에 값을 건네는 방법이 바로 매개변수와 인자입니다.

매개변수와 인자, 이름부터 구분해 보기

매개변수와 인자를 구분하는 함수 호출 흐름

용어가 비슷해서 처음엔 헷갈리기 쉬운데요. 함수 정의에 적어 두는 입력 자리 이름이 매개변수(parameter)이고, 함수를 부를 때 실제로 넣는 값이 인자(argument)입니다. 함수가 값을 받아 두는 자리를 미리 만들어 놓고, 호출할 때 그 자리에 값을 전달한다고 생각하면 편해요.

def greet(name):  # name은 매개변수
    print(f"안녕, {name}!")

greet("민지")  # "민지"는 인자

여기서는 name이라는 매개변수에 "민지"라는 인자가 전달됩니다. 함수 안에서는 name을 사용하니, 나중에 greet("도윤")이라고 부르면 같은 함수로 다른 이름을 인사할 수 있죠. 함수를 여러 개 복사하지 않아도 되니 나름 든든합니다.

위치 인자로 값을 전달하기

인자를 순서에 맞춰 전달하는 단계

가장 기본적인 방법은 위치 인자입니다. 함수에 적힌 매개변수 순서에 맞춰 값을 넣어요.

def introduce(name, age):
    print(f"저는 {name}, {age}살이에요.")

introduce("수아", 28)

첫 번째 값 "수아"는 name으로, 두 번째 값 28은 age로 들어갑니다. 순서가 바뀌면 결과도 바뀌어요.

introduce(28, "수아")

이렇게 호출해도 파이썬은 일단 값을 순서대로 전달합니다. 그래서 문장이 어색해지거나, 계산을 하는 함수라면 오류가 날 수도 있어요. 어? 값은 다 넣었는데 왜 이상하지 싶을 때는 호출한 순서와 매개변수 순서가 맞는지 먼저 확인해 보세요.

기본값을 정해 두면 더 편해요

기본값이 있는 인자와 생략 가능한 입력

어떤 입력은 대부분의 경우 같은 값으로 쓰이기도 하죠. 그럴 땐 매개변수에 기본값을 지정할 수 있습니다. 호출할 때 해당 값을 생략하면 기본값이 사용돼요.

def greet(name, message="안녕하세요"):
    print(f"{message}, {name}!")

greet("민지")
greet("민지", "반가워요")

첫 호출에서는 message를 생략했으니 "안녕하세요"가 들어가고, 두 번째 호출에서는 전달한 "반가워요"가 쓰입니다. 기본값을 지정한 매개변수는 보통 필수 매개변수 뒤에 둡니다.

# 이렇게 작성하면 문법 오류가 납니다
# def greet(message="안녕하세요", name):
#     ...

필수 입력인 name을 먼저 두고, 생략 가능한 message를 뒤에 두면 읽기도 편하죠. 기본값은 함수가 정의될 때 정해집니다. 숫자나 문자열처럼 간단한 값부터 사용하면 이해하기 좋습니다.

키워드 인자로 헷갈림 줄이기

매개변수 이름을 지정해 값을 전달하는 예

인자가 여러 개라면 순서를 외우기 번거로울 수 있어요. 이럴 때는 키워드 인자로 매개변수 이름을 함께 적어 전달할 수 있습니다.

def make_profile(name, city):
    print(f"{name}님은 {city}에 살아요.")

make_profile(city="부산", name="지우")

매개변수 이름을 적었으니 순서가 바뀌어도 각 값이 어디로 가는지 분명합니다. 코드만 봐도 city에 부산, name에 지우가 들어가는 게 보이죠. 위치 인자와 키워드 인자를 함께 쓸 수도 있지만, 위치 인자를 먼저 적어야 합니다.

make_profile("지우", city="부산")  # 가능
# make_profile(name="지우", "부산")  # 불가능

키워드 인자를 쓸 때 같은 매개변수에 값을 두 번 주지 않도록 주의하세요. 예를 들어 make_profile("지우", name="민지")는 name에 값을 두 번 전달하므로 오류가 납니다.

입력을 고르는 작은 기준

처음에는 아래처럼 생각하면 충분합니다.

  • 값의 순서가 짧고 분명하면 위치 인자
  • 어떤 값인지 이름을 드러내고 싶으면 키워드 인자
  • 자주 쓰는 값이 정해져 있으면 기본값

아, 함수에 여러 입력을 더 유연하게 받는 *args, **kwargs도 있지만, 처음부터 한꺼번에 외울 필요는 없어요. 우선 매개변수와 인자, 기본값, 키워드 인자의 흐름을 익혀 두면 다음에 만날 때 덜 낯섭니다.

함수에 데이터를 전달하는 방법을 알았으니, 이제 그 데이터로 계산한 결과를 함수 밖으로 가져오는 방법도 궁금해지죠. 다음 글에서는 return을 사용해 함수의 반환값을 다뤄 보겠습니다. 입력을 잘 건네는 법을 익혔다면, 이제 결과를 돌려받을 차례예요.

AIWD 소모임AI 자동화 오픈톡