Python *
문법 완벽 가이드: 함수 인자, 언패킹, 가변 인자까지
Python에서 *
는 다양한 용도로 사용되어, 각각의 의미와 쓰임을 알면 코드를 더욱 유연하고 효율적으로 작성할 수 있습니다. 이번 글에서는 *
의 역할과 사용 예제를 통해 Python의 *
문법을 확실히 이해할 수 있도록 도와드리겠습니다.
1. *
로 가변 인자 (*args) 받기
가장 흔하게 사용하는 *
의 용도는 함수의 가변 인자를 받는 것입니다. *args
를 사용하면 함수가 임의의 개수의 인자를 받을 수 있게 되어, 코드의 유연성이 높아집니다.
def print_all(*args):
for arg in args:
print(arg)
# 실행 예시
print_all(1, 2, 3)
print_all("apple", "banana", "cherry")
설명
*args
는 튜플 형태로 전달되며, 함수에서 여러 개의 인자를 하나의 변수로 받아 처리할 수 있게 합니다.- 인자의 개수가 정해지지 않았거나 동적으로 처리해야 할 때 유용합니다.
2. *
로 리스트나 튜플 언패킹하기
*
는 리스트나 튜플을 언패킹하여 각각의 요소를 별도의 값으로 전달할 때도 사용됩니다. 이 문법을 통해 리스트나 튜플의 각 요소를 개별 인자로 분리하여 함수에 전달할 수 있습니다.
def add(a, b, c):
return a + b + c
numbers = [1, 2, 3]
result = add(*numbers) # 리스트를 언패킹하여 각각의 요소를 인자로 전달
print(result)
설명
*numbers
는 리스트[1, 2, 3]
을 언패킹하여 각각의 요소를 함수add
에 인자로 전달합니다.- 리스트나 튜플의 요소 개수와 함수의 인자 개수가 일치해야 합니다. 일치하지 않으면 오류가 발생합니다.
3. 함수에서 *
로 위치 기반 인자와 키워드 인자 구분하기
함수 정의 시 *
를 사용해 위치 기반 인자와 키워드 인자 사이를 구분할 수 있습니다. 위치 인자와 키워드 인자를 명확하게 구분하여 함수 호출 시 오류를 방지하고 가독성을 높입니다.
def order_items(main, *sides, drink):
print(f"Main dish: {main}")
print("Side dishes:", sides)
print(f"Drink: {drink}")
# 실행 예시
order_items("Burger", "Fries", "Salad", drink="Cola")
설명
*sides
는 가변 위치 인자를 받아 튜플 형태로 저장합니다.drink
는 키워드 인자로만 전달할 수 있습니다. 즉,drink="Cola"
처럼 키워드로 명시해야 합니다.- 이 방식을 사용하면 특정 인자를 명시적으로 키워드 인자로만 전달하게 할 수 있어, 코드의 가독성과 유지보수성이 높아집니다.
4. *
로 리스트나 튜플 결합하기
Python의 *
문법은 리스트나 튜플을 결합할 때도 사용할 수 있습니다. 여러 리스트를 결합하거나, 리스트에 요소를 추가할 때 유용하게 사용할 수 있습니다.
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined_list = [*list1, *list2] # 리스트 결합
print(combined_list)
설명
[ *list1, *list2 ]
는list1
과list2
를 각각 언패킹하여 하나의 리스트로 결합합니다.- 같은 방식으로 튜플을 결합할 수 있으며, 코드가 간결해지고 가독성이 높아집니다.
5. *
로 여러 개의 값을 한 변수에 묶기
반대로, *
를 사용하여 여러 개의 값을 한 변수에 묶어 저장할 수도 있습니다. 함수의 매개변수에서 일부 값을 개별 변수로 할당하고, 나머지 값을 리스트로 묶어 관리할 때 유용합니다.
def split_elements(first, *rest):
print("First element:", first)
print("Remaining elements:", rest)
# 실행 예시
split_elements(1, 2, 3, 4, 5)
설명
- 첫 번째 인자는
first
에 저장되고, 나머지 인자는*rest
로 묶여서 튜플 형태로 저장됩니다. - 이러한 방식은 함수 인자 중 특정 인자만 분리하고 나머지를 한꺼번에 관리할 때 유용하게 사용됩니다.
6. 딕셔너리 언패킹으로 **
대신 *
사용하기
*
는 딕셔너리를 언패킹하는 데도 사용할 수 있지만, 값만 가져오며 키는 무시됩니다. 딕셔너리에서 모든 값만 필요할 때 유용합니다.
data = {'a': 1, 'b': 2, 'c': 3}
print(*data) # 'a', 'b', 'c' 키만 가져옴
print(*data.values()) # 값들만 출력: 1 2 3
설명
*data
는 딕셔너리의 키만 출력하고,*data.values()
는 딕셔너리의 값을 개별 인자로 언패킹합니다.- 딕셔너리의 키나 값만 가져올 때
*
문법을 활용하면 반복문 없이도 값에 쉽게 접근할 수 있습니다.
요약: Python에서 *
문법 정리
Python의 *
는 다음과 같이 여러 방식으로 사용됩니다.
- 함수에서 가변 인자를 받을 때 (
*args
) - 리스트나 튜플을 언패킹하여 함수에 인자로 전달할 때
- 함수 정의에서 위치 인자와 키워드 인자를 구분할 때
- 여러 리스트나 튜플을 결합할 때
- 함수 매개변수에서 여러 값을 한 변수에 묶을 때
- 딕셔너리의 값만 언패킹할 때
이처럼 *
는 다양한 상황에서 유용하게 활용되므로, 각 용법을 이해하고 코드를 더욱 효율적이고 간결하게 작성해보세요!
'개발 > Python 스터디' 카테고리의 다른 글
[Python] `*`와 `**`를 함께 사용하기: 위치 인자와 키워드 인자 활용법 (0) | 2024.11.07 |
---|---|
[Python] `**` 문법으로 복잡한 코드를 간단하게: 딕셔너리 언패킹과 키워드 인자 사용법 (1) | 2024.11.06 |
[Python] `pdb`와 데코레이터 활용 가이드: 특정 함수만 효율적으로 디버깅하기 (0) | 2024.11.04 |
[python] 아직도 print로 디버깅하시나요? Python pdb 디버거로 효율적인 디버깅 시작하기 (0) | 2024.11.03 |
[python] 파이썬 데코레이터 완벽 가이드: 다양한 데코레이터 활용 예제와 설명 (0) | 2024.11.03 |