위인자 == 가변인자, 스타인자(*args)

def log(message, values):
    if not values:
        print(message)
    else:
        values_str = ', '.join(str(x) for x in values)
        print(f'{message}: {values_str}')

log('My numbers are', [1, 2])
log('Hi there', [])

>>>
My numbers are: 1, 2
Hi there

log('Hi there', []) → 두 번째 인자를 생략하기 위해서는 마지막 위치 인자 이름 앞에 * 를 붙이면 됨

이미 시퀸스(리스트 등)이 있을 때 log() 같은 함수에 시퀸스를 넘기로 싶다면 * 연산자를 사용하면 됨

위치 인자(*args) 문제점

  1. 위치 인자가 함수에 전달되기 전에 항상 튜플로 변환된다는 것

*args 를 받는 함수의 인자는 인자의 개수가 적을 때 사용하면 좋음

  1. 함수에 새로운 위치 인자를 추가하면 해당 함수를 호출하는 모든 코드를 변경해야만 함