[Python] 인자
위치 매개변수(Positional Arguments)
정의와 사용 방법
위치 매개변수는 함수를 호출할 때 인자의 순서에 따라 함수 내에서 해당하는 매개변수로 전달되는 인자를 의미합니다. 이는 가장 기본적인 매개변수 전달 방식으로, 정의된 함수의 매개변수 목록에 따라 순서대로 인자가 매칭됩니다.
함수에서 인자를 받을 때, 매개변수의 이름보다는 그 위치가 중요합니다. 첫 번째 인자가 첫 번째 매개변수에, 두 번째 인자가 두 번째 매개변수에 할당되는 방식입니다. 상세하게 말하자면, 함수를 정의할 때 입력하는 값을 받기 위해 설정하는 변수가 매개변수이고, 함수를 호출할 때 전달하는 실제 값을 인자라고 합니다.
매개변수의 숫자와 함수를 호출할 때 전달하는 인자의 숫자가 일치해야 합니다. 그렇지 않으면 Python이 TypeError
를 발생시킵니다.
예제 코드
이해를 돕기 위해 간단한 예제로 위치 매개변수의 사용법을 다루겠습니다.
# 함수 정의 예시
def introduce(name, age):
print(f"이름은 {name}이고, 나이는 {age}살입니다.")
# 함수 호출 예시
introduce("홍길동", 25)
위 예제에서 introduce
함수는 두 개의 위치 매개변수 name
과 age
를 받습니다. 함수를 호출할 때 "홍길동"
, 25
라는 인자를 순서대로 전달하고 있으며, 이는 각각 name
과 age
매개변수에 할당됩니다. 따라서 실행 결과는 다음과 같습니다:
이름은 홍길동이고, 나이는 25살입니다.
만약 함수 호출 시 인자의 순서를 바꾼다면:
introduce(25, "홍길동")
실행 결과는 예상과 달리 다음과 같이 출력됩니다:
이름은 25이고, 나이는 홍길동살입니다.
이처럼 위치 매개변수는 인자를 전달할 때 그 순서가 중요합니다. 인자의 순서에 따라 함수 내에서 다른 변수에 값이 할당되기 때문입니다.
키워드 매개변수( Keyword Arguments)
키워드 매개변수는 함수를 호출할 때, 인자에 명시적으로 키워드(매개변수 이름)를 붙여 전달하는 방식을 말합니다. 이 방식을 사용하면, 인자의 순서와 상관없이 함수에 값을 전달할 수 있습니다. 또한, 코드의 가독성을 크게 향상시키며, 함수 호출 시 어떤 값이 어떤 매개변수에 할당되는지 명확히 알 수 있습니다.
키워드 매개변수는 일반적인 위치기반 매개변수(Positional Arguments)와 혼용해서 사용할 수 있지만, 위치기반 매개변수 뒤에 와야 합니다.
정의와 사용 방법
함수를 정의할 때는 일반적인 방식으로 매개변수를 지정합니다. 함수를 호출하면서 매개변수 이름과 함께 인자를 전달함으로써 키워드 매개변수를 사용할 수 있습니다.
예제 코드
아래는 키워드 매개변수를 사용하는 간단한 예시입니다. 여기서 greet()
함수는 name
과 message
라는 두 개의 매개변수를 받습니다. 함수 호출 시 name
과 message
에 해당하는 값을 키워드 인자로 전달합니다. 이렇게 하면 인자의 순서가 뒤바뀌어도 올바르게 함수에 전달됩니다.
def greet(name, message):
print("Hello", name + ', ' + message)
# 키워드 매개변수를 사용하는 함수 호출
greet(message="Welcome to the Python world!", name="Alice")
# 출력: Hello Alice, Welcome to the Python world!
이 예에서 greet(message="Welcome to the Python world!", name="Alice")
에서 보듯이, message
와 name
매개변수에 전달되는 값들은 순서와 상관없이 명확하게 함수에 인자로서 전달됩니다.
키워드 인자를 사용하면 다음과 같은 이점이 있습니다:
- 함수 호출 코드의 가독성이 향상됩니다.
- 함수에 전달되는 인자들의 순서를 걱정하지 않아도 됩니다.
- 일부 매개변수에만 기본값이 있을 경우, 해당 매개변수를 생략하고 나머지 인자들을 명확하게 지정할 수 있습니다.
키워드 매개변수는 파이썬에서 함수를 더욱 유연하게 사용할 수 있게 해주는 중요한 기능 중 하나입니다.
기본 매개변수 값(Default Parameter Values)
함수를 정의할 때, 매개변수가 특정 값으로 기본 설정되게 만들 수 있습니다. 이를 기본 매개변수 값 또는 기본 인자라고 합니다. 해당 매개변수에 대응하는 인자가 함수 호출 시 제공되지 않으면, 기본값이 대신 사용됩니다. 이는 함수의 유연성을 향상시키며, 동일한 함수를 다양한 시나리오와 매개변수 집합에 적용할 수 있게 해 줍니다.
정의와 사용 방법
기본 매개변수는 함수 정의 시점에서 매개변수 이름 뒤에 등호(=)와 함께 기본값을 명시함으로써 정의됩니다. 기본 매개변수는 필수 매개변수(기본값을 갖지 않는 매개변수) 뒤에 위치해야 합니다.
def 함수명(필수매개변수, 기본매개변수=기본값):
# 함수 본문
예제 코드
아래는 기본 매개변수 값 사용의 몇 가지 예입니다.
- 인사말 출력 예제: 사용자 이름을 인자로 받아 인사말을 출력하는 함수입니다. 인자가 제공되지 않으면, 기본적으로 "세계"에게 인사합니다.
def greet(name="세계"):
print(f"안녕, {name}!")
greet("지구인") # "안녕, 지구인!" 출력
greet() # "안녕, 세계!" 출력
- 계산기 예제: 두 숫자의 합을 계산하는 함수입니다. 두 번째 숫자는 기본적으로 0으로 설정됩니다. 따라서, 한 개의 숫자만 제공될 경우, 그 숫자 자체가 결과가 됩니다.
def add(a, b=0):
return a + b
print(add(5, 3)) # 8 출력
print(add(5)) # 5 출력
- 사용자 정보 출력: 사용자의 이름과 기본적으로 정해진 나이를 출력합니다. 나이는 기본적으로 20으로 설정됩니다.
def print_user_info(name, age=20):
print(f"이름: {name}, 나이: {age}")
print_user_info("김철수", 25) # "이름: 김철수, 나이: 25" 출력
print_user_info("박영희") # "이름: 박영희, 나이: 20" 출력
위 예제들에서 볼 수 있듯이, 기본 매개변수 값은 함수의 사용성을 확장시키고, 다양한 경우에 적용할 수 있도록 만들어줍니다. 조건에 따라 선택적으로 인자를 제공할 수 있게 해줌으로써 코드의 가독성과 유지보수성을 향상시킵니다.
가변 매개변수는 함수가 임의의 개수의 매개변수를 받을 수 있도록 하는 기능입니다. Python에서는 *args와 **kwargs를 사용하여 가변 매개변수를 구현합니다. *args는 위치 기반(non-keyword) 가변 매개변수를, **kwargs는 키워드 기반(keyword) 가변 매개변수를 처리합니다.
*args (Non-keyword Variable-length Arguments)
*args는 함수에 전달할 수 있는 위치 매개변수의 수가 가변적일 때 사용합니다. 이를 통해 함수는 미리 정의된 매개변수 수를 초과하는 추가 인자들을 튜플로 받아 처리할 수 있습니다.
예시:
def add_numbers(*args):
total = 0
for number in args:
total += number
return total
print(add_numbers(1, 2, 3)) # 출력: 6
print(add_numbers(1, 2, 3, 4, 5)) # 출력: 15
이 예시에서 add_numbers
함수는 임의 개수의 수를 받아 그 합계를 계산합니다. *args 덕분에 함수 호출 시 전달되는 인자 수가 변해도 함수를 수정하지 않고 사용할 수 있습니다.
**kwargs (Keyword Variable-length Arguments)
**kwargs는 함수에 전달할 수 있는 키워드 매개변수의 수가 가변적일 때 사용됩니다. **kwargs를 사용하면 함수에 키워드 인자 명과 그 값을 딕셔너리 형태로 받을 수 있습니다. 이는 함수에 이름이 지정된 인자들을 동적으로 전달할 때 유용합니다.
예시:
def greet(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
greet(first="Hello", second="World") # 출력: first: Hello \n second: World
이 예시에서 greet
함수는 인자의 개수와 종류에 제한이 없습니다. **kwargs 덕분에 함수 호출 시 어떤 이름의 키워드 인자를 전달해도 해당 인자들을 딕셔너리 형태로 받아 처리할 수 있습니다.
조합 사용
*args와 **kwargs는 함께 사용할 수 있으며, 이를 통해 위치 기반 인자와 키워드 인자 모두를 가변적으로 받는 함수를 정의할 수 있습니다.
예시:
def func(*args, **kwargs):
print("Positional Arguments:", args)
print("Keyword Arguments:", kwargs)
func(1, 2, 'apple', key1='value1', key2='value2')
이 예시에서 func
함수는 위치 기반 인자와 키워드 기반 인자를 모두 받습니다. 출력 결과는 다음과 같습니다.
Positional Arguments: (1, 2, 'apple')
Keyword Arguments: {'key1': 'value1', 'key2': 'value2'}
가변 매개변수를 사용하는 것은 함수의 유연성을 대폭 향상시킬 수 있으며, 예상치 못한 많은 사용 사례에 대응할 수 있게 해줍니다. 하지만 이 기능을 사용할 때는 함수 내부에서 인자를 적절히 처리하는 로직을 구현해야 함을 잊지 말아야 합니다.
*args(Non-keyword Variable-length Arguments)
정의와 사용 방법
*args
는 Python 함수에서 사용할 수 있는 매개변수이며, "non-keyword variable-length arguments"를 의미합니다. 이 매개변수를 사용하면, 함수에 인자의 개수가 정해지지 않은 상태에서도 다수의 위치 인자를 전달할 수 있습니다. 즉, 함수를 호출할 때 매개변수의 수가 가변적일 때 유용합니다.
*args
사용 방법은 간단합니다. 함수 정의에서 하나의 매개변수 앞에 별표(*)를 붙여서 사용합니다. 이렇게 하면, 해당 매개변수는 들어오는 위치 인자들을 모두 튜플로 나타냅니다. 함수 내부에서는 이 튜플에 대해 반복문을 사용하거나 인덱스로 각 인자에 접근할 수 있습니다.
예제 코드
아래의 예제 코드는 *args
를 사용하는 방법을 보여줍니다. 코드는 여러 수를 인자로 받아 그 합을 계산하는 함수입니다.
def sum_numbers(*args):
total = 0
for number in args:
total += number
return total
# 함수 호출 예시
print(sum_numbers(1, 2, 3)) # 출력: 6
print(sum_numbers(10, 20)) # 출력: 30
print(sum_numbers(1, 2, 3, 4, 5, 6)) # 출력: 21
- 첫 번째 예시에서는 함수에 3개의 인자(1, 2, 3)를 전달하고, 이들의 합인 6을 받습니다.
- 두 번째 예시에서는 함수에 2개의 인자(10, 20)를 전달하고, 이들의 합인 30을 받습니다.
- 세 번째 예시에서는 함수에 6개의 인자(1, 2, 3, 4, 5, 6)를 전달하고, 이들의 합인 21을 받습니다.
이렇게 *args
를 사용하는 것은 함수에 여러 개의 인자를 자유롭게 전달할 수 있게 해주며, 함수의 유연성을 대폭 높여줍니다.
**kwargs(Keyword Variable-length Arguments)
**kwargs는 파이썬에서 키워드 가변 인자를 다루기 위한 매개변수 명명 규칙입니다. kwargs
는 "keyword arguments"의 약자이며, 이 매개변수를 통해 함수는 임의의 수의 키워드 인자를 받을 수 있습니다. 이는 인자의 이름과 값을 모두 포함하여 함수 내부로 전달됩니다. **kwargs는 인자를 딕셔너리 형태로 받아들이기 때문에, 함수 내에서 인자에 접근할 때 딕셔너리의 접근 방식을 사용합니다.
정의와 사용 방법
함수를 정의할 때 **kwargs를 매개변수로 사용하면, 그 함수는 임의의 수의 키워드 인자를 받을 수 있습니다. **kwargs는 인자들을 딕셔너리로 묶어주며, 딕셔너리의 키는 인자의 이름, 값은 해당 인자에 전달된 값입니다.
이를 사용하는 이유는 때때로 모든 인자의 이름과 값이 미리 정의되지 않은 경우에 편리함을 제공하기 때문입니다. 특히, 다양한 설정이나 옵션 값이 필요한 함수를 작성할 때 유용하게 사용됩니다.
def my_function(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
위 함수는 어떤 키워드 인자든 받을 수 있고, 각 인자의 이름과 값이 출력됩니다.
예제 코드
**kwargs의 실제 사용 예를 들어보겠습니다. 다음 예제는 사용자에게 여러 개의 이름이 담긴 딕셔너리를 받아, 각 이름의 인사말을 출력하는 간단한 기능입니다.
def greet_users(**users):
for name, greeting in users.items():
print(f"{greeting}, {name}!")
greet_users(john="Hello", sarah="Hi", michael="Greetings")
이 함수를 실행하면, 다음과 같은 출력을 얻을 수 있습니다:
Hello, john!
Hi, sarah!
Greetings, michael!
이처럼 **kwargs를 사용함으로써, 함수가 받아들일 인자의 수와 종류를 자유롭게 할 수 있게 됩니다. 이를 통해 훨씬 유연한 함수 설계가 가능해집니다.