파이썬에서 키워드 인수(Keyword Arguments)는 함수 호출 시 매개변수 이름을 지정하여 값을 전달하는 방법이다. 이를 통해 함수 호출 시 인수의 순서를 지키지 않고도 값을 전달할 수 있으며, 가독성을 높이고 오류를 줄일 수 있다. 키워드 인수는 위치 인수(Positional Arguments)와 함께 사용할 수도 있다.
1. 기본 구조
함수 정의 시 매개변수를 지정하고, 함수 호출 시 매개변수 이름과 함께 값을 전달한다.
def 함수이름(매개변수1, 매개변수2, ...):
함수 본문
함수이름(매개변수1=값1, 매개변수2=값2, ...)
2. 키워드 인수 사용 예제
예제 1: 기본적인 키워드 인수 사용
def greet(name, msg):
print(f"{msg}, {name}!")
greet(name="Alice", msg="Hello") # 출력: Hello, Alice!
greet(msg="Hi", name="Bob") # 출력: Hi, Bob!
이 예제에서 greet 함수는 두 개의 매개변수 name과 msg를 받으며, 함수 호출 시 매개변수 이름을 지정하여 값을 전달한다.
3. 키워드 인수와 위치 인수 함께 사용하기
키워드 인수는 위치 인수와 함께 사용할 수 있다. 이 경우 위치 인수가 먼저 나와야 한다.
def describe_person(name, age, city):
print(f"Name: {name}, Age: {age}, City: {city}")
describe_person("Alice", age=30, city="New York")
# 출력: Name: Alice, Age: 30, City: New York
이 예제에서 describe_person 함수는 세 개의 매개변수를 받으며, 첫 번째 인수는 위치 인수로, 나머지 두 인수는 키워드 인수로 전달된다.
4. 기본 매개변수와 키워드 인수
기본 매개변수와 키워드 인수를 함께 사용할 수 있다. 이 경우 기본값이 없는 매개변수는 기본값이 있는 매개변수보다 앞에 위치해야 한다.
def greet(name, msg="Hello"):
print(f"{msg}, {name}!")
greet("Alice") # 출력: Hello, Alice!
greet("Bob", msg="Hi") # 출력: Hi, Bob!
이 예제에서 greet 함수는 msg 매개변수에 기본값을 가지며, 키워드 인수로 값을 전달할 수 있다.
5. 가변 키워드 인수 (**kwargs)
함수 정의 시 **kwargs를 사용하면 정해지지 않은 수의 키워드 인수를 받을 수 있다. **kwargs는 딕셔너리 형태로 함수 내부에서 사용된다.
def describe_person(name, **kwargs):
print(f"Name: {name}")
for key, value in kwargs.items():
print(f"{key}: {value}")
describe_person("Alice", age=30, city="New York", job="Engineer")
# 출력:
# Name: Alice
# age: 30
# city: New York
# job: Engineer
이 예제에서 describe_person 함수는 name 매개변수와 가변 키워드 인수를 받아, 전달된 키워드 인수들을 출력한다.
6. 가변 인수와 가변 키워드 인수 함께 사용하기
함수 정의 시 *args와 **kwargs를 함께 사용할 수 있다. 이 경우 *args가 먼저 나와야 한다.
def describe_person(*args, **kwargs):
for arg in args:
print(f"Arg: {arg}")
for key, value in kwargs.items():
print(f"{key}: {value}")
describe_person("Alice", "Bob", age=30, city="New York")
# 출력:
# Arg: Alice
# Arg: Bob
# age: 30
# city: New York
이 예제에서 describe_person 함수는 가변 위치 인수와 가변 키워드 인수를 받아 각각 출력한다.
7. 키워드 전용 인수 (Keyword-only Arguments)
키워드 전용 인수는 위치 인수로는 전달할 수 없고, 반드시 키워드 인수로만 전달할 수 있는 매개변수이다. 함수 정의 시 * 를 사용하여 지정할 수 있다.
def describe_person(name, *, age, city):
print(f"Name: {name}, Age: {age}, City: {city}")
describe_person("Alice", age=30, city="New York") # 출력: Name: Alice, Age: 30, City: New York
# describe_person("Alice", 30, "New York") # 오류 발생: age와 city는 키워드 인수로 전달해야 함
이 예제에서 describe_person 함수는 name 매개변수를 위치 인수로 받고, age와 city 매개변수는 키워드 인수로만 받을 수 있다.