기본적으로 python에서 많이 사용되는 *
연산자에 대해 누구나 잘 알 것이다. 아래 코드와 같이 *
한개는 곱셈 연산자, **
두개는 거듭제곱 연산자로 사용된다.
* Code
# '*' 한개(곱셈)
a = 3 * 4
# '**' 두개(거듭제곱)
b = 3 ** 4
print(a)
print(b)
* Output
12
81
*
은 list, tuple, dictionary 자료형 앞에 붙으면 unpacking의 역할을 한다. 즉, list, tuple, dictionary 자료형 앞에 붙이게 될 경우 list, tuple, dictionary 안에 있는 값들을 풀어 각각으로 분해해준다는 의미이다.
* Code
# list
example1 = [1, 4, 7, 3, 2, 9]
print(*example1)
# tuple
example2 = (3, 5, 2, 1)
print(*example2)
# dictionary
example3 = {1:'file', 2:'edit', 3:'view', 4:'navigate'}
print(*example3)
* Output
1 4 7 3 2 9 # example1
3 5 2 1 # example2
1 2 3 4 # example3
위의 code와 output을 살펴보면 list, tuple, dictionary 모두 *
을 붙임으로써 unpacking이 잘 되는 것을 확인할 수 있다. 추가적으로 dictionary의 경우 key에 대한 값들이 unpacking되어 출력되는 것을 알 수 있다.
추가적으로 다른 형태의 unpacking의 역할로 사용할 수 있는데 아래 코드를 살펴보자.
* Code
# list
example1 = [1, 4, 7, 3, 2, 9]
a, *b, c = example1
print(a, b, c)
d, e, *f, g = example1
print(d, e, f, g)
h, i, *j = example1
print(h, i, j)
# tuple
example2 = (3, 5, 2, 1)
a, *b = example2
print(a, b)
* Output
1 [4, 7, 3, 2] 9 # print(a, b, c)
1 4 [7, 3, 2] 9 # print(d, e, f, g)
1 4 [7, 3, 2, 9] # print(h, i, j)
3 [5, 2, 1] # print(a, b)
위의 output과 같이 *b
, *f
, *j
와 같이 변수로 사용된다면 우변의 list나 tuple형 자료형은 unpacking이 되고, 각 변수에 할당된 후 *
이 붙은 변수는 우변의 자료형이 list, tuple인지에 관계 없이 무조건 list로 packing되어 저장된다.
print()
함수는 굉장히 느리기 때문에 많이 사용할수록 시간이 오래 걸린다. 그러므로 List에 담겨있는 값들을 print(list)
함수를 사용하여 한 줄에 반복 출력할 때 for문으로 반복 출력하는 것 보다 print(*list)
를 활용하는 것이 더 빠르다. 즉, print()
함수를 쓰는 횟수를 줄이는 것이 좋다는 의미이다.