파이썬에서의 Asterisk(*)는 유독 다른 언어에 비해 연산의 종류 및 쓰임새가 풍부합니다. 단순 곱셈 및 거듭제곱 연산 이외의 경우에 대해 이 포스팅에서 정리하려 합니다.
*을 숫자형 연산 에 사용할 수 있습니다.
1개 사용시엔 곱셈 연산, 2개 사용시엔 제곱 연산을 위해 사용합니다.
result = 3 * 4
print(result) # 출력: 12
result = 3 ** 4
print(result) # 출력: 81
리스트나 튜플 등 반복 가능한 객체를 확장할 때도 Asterisk를 사용할 수 있습니다.
리스트를 반복 확장하려면 Asterisk를 사용합니다.
list1 = [1, 2, 3]
list2 = list1 * 3

튜플도 같은 방식으로 확장할 수 있습니다.
tuple1 = (1, 2, 3)
tuple2 = tuple1 * 2

패킹(Packing)은 여러 개의 값을 하나의 컬렉션(예: 리스트, 튜플)으로 모으는 과정입니다. 위치 인자 패킹과 키워드 인자 패킹이 있습니다.
함수를 정의할 때 인자에 *를 사용하면 가변 인자로 받을 수 있습니다. 파이썬에서 함수에 전달되는 가변 인자들을 튜플로 받아 처리할 때 사용됩니다. 이를 통해 함수는 다양한 수의 위치 인자(positional arguments)를 처리할 수 있습니다.
def foo(*args):
for arg in args:
print(arg)

함수를 정의할 때 **를 사용하면 키워드 가변 인자를 받을 수 있습니다. 함수에 전달되는 키워드 인자를 딕셔너리 형태로 받아 처리할 수 있게 합니다.
def foo(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")

함수가 위치 인자와 키워드 인자를 모두 받아 처리할 수 있습니다.
def greet(greeting, *args, **kwargs):
# 기본 인사 메시지 출력
print(greeting)
# 위치 인자 출력
for name in args:
print(f"Hello, {name}!")
# 키워드 인자 출력
for key, value in kwargs.items():
print(f"{key}: {value}")
# 함수 호출
greet("Welcome!", "Alice", "Bob", location="Wonderland", age=30)

리스트나 튜플 등의 데이터를 함수 호출 시 언패킹할 수 있습니다.
def foo(a, b, c):
print(a, b, c)

참고 : 이 때, 리스트나 튜플 등의 데이터가 원래 함수의 인자 갯수랑 동일한 길이여야 합니다.
리스트 언패킹을 통해 새로운 리스트를 만들 수도 있습니다
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined_list = [*list1, *list2]
