이 글은 파이썬에서 * 표현이 어떤 용도로 사용하는지에 대해 다룹니다.


1. 곱셈과 거듭제곱

- 굳이 코드를 붙이지 않아도 다들 아실거라고 생각합니다.

  • 1 * 2 = 2
  • 2 ** 2 = 4

2. 리스트 확장

* 를 사용하여 리스트를 간단히 확장할 수 있습니다.


3. 가변인자

가변인자란, 이름 그대로 길이가 변할 수 있는 argument를 말합니다. 

임의의 함수에 인자로 몇개의 데이터가 들어올지 모르게 되는 경우에 사용하면 편리합니다. 

이때 여러 api나 잘 짜여진 코드를 구경하다보면 함수에 *args**kwargs라고 되있는 표현들을 많이 볼 수 있습니다.

이게 바로 가변인자를 사용하겠다는 의미입니다. 한개와 두개의 차이는 positional과 keyward 인자의 차이입니다. 

이름만 들어서는 낯설 수 있지만, 사실 이미 사용하고 있을지도 모릅니다. 각각은 아래와 같습니다.

def function(a, b = None):
...

여기서 a는 positional arguments, b는 keyword arguments라고 칭합니다. 모두 아시다시피 a는 값이 없는 경우 error가 뜨게 되며, b는 default값으로 None값을 주게 되죠.

아래 예제처럼 args는 tuple 또는 list, kwargs는 dict에 저장되어 출력되는 것을 볼 수 있으며, 동시에 사용할 수도 있습니다. 

def args_function(*args):
    print(args)

def kwargs_function(**kwargs):
    print(kwargs)
    
args_function('a', 'b') # ('a', 'b')
kwargs_function(a = 100, b = 200) # {'a':100, 'b':200}

4. Unpacking

알고리즘을 짜다보면 결과부분을 출력할 때, for-lopp를 이용하여 list를 순회하며 출력하는 경우가 있습니다.

# list unpacking
test = [1, 2, 3, 4]
print(*test) # 1 2 3 4

# tuple unpacking
test = (5, 6, 7, 8)
print(*test) # 5 6 7 8

이렇게 사용하면 코드 길이도 줄고 편리하죠?

다음은 각 변수 중 하나에 가변적으로 할당하고 싶은 경우입니다. 

다음과 같이 사용할 수도 있습니다.

test = [1, 2, 3, 4, 5]

*a, b = test
print(a, b) # [1, 2, 3, 4], 5

a, *b, c = test
print(a, b, c) # 1, [2, 3, 4], 5