파이썬의 Asterisk(*)는 크게 4가지 상황에서 사용된다.
- 곱셈 및 거듭제곱 계산할 때
- 리스트를 반복 확장할 때
- 가변인자
- 컨테이너 타입의 데이터를 unpacking 할 때
1. 곱셈 및 거듭제곱 계산할 때
2 * 4 #8
2 * 4 #16
2. 리스트를 반복 확장할 때
list, tuple과 같이 list container type에서 데이터를 반복적으로 확장할 수 있다.
zeros1 = [0] * 10
#[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
zeros2 = (0,) * 10
#(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
3. 가변인자(Variadic Parameters)로서 사용
파이썬에서는 다음과 같이 2가지 종류의 인자가 있다.
positional arguments는 위치에 따라 정해지는 인자이며, keyword arguments는 이름을 가진 인자이다.
def save_ranking(*args, **kwargs):
print(args)
print(kwargs)
save_ranking('ming', 'alice', 'tom', fourth='wilson', fifth='roy')
# ('ming', 'alice', 'tom')
# {'fourth': 'wilson', 'fifth': 'roy'}
- 첫번째, 두번째, 세번째 변수는 positional arguments, fourth와 fifth는 keyword arguments이다.
keyword arguments는 생략 가능하기 때문에 positional arguments 이전에 선언되면 오류가 발생한다. *args
는 임의의 갯수의 positional 인자들이 tuple로 저장된다.**kwargs
는 임의의 갯수의 keyword 인자들이 dictionary로 저장된다.
변수는 원하는대로 지정 가능하나 위의 관례를 따른다.
4. container type의 데이터를 unpacking
list, tuple 형태의 데이터를 함수의 가변 인자로 받는 경우에 *
로 사용할 수 있다.
dictionary 형태의 데이터를 함수의 가변 인자로 받는 경우에 **
로 사용할 수 있다.
from functools import reduce
def product(*numbers):
p = reduce(lambda x, y: x * y, numbers)
return p
primes = [2, 3, 5, 7, 11, 13]
product(*primes)
# 30030
product(primes)
# [2, 3, 5, 7, 11, 13]
product()
함수는 가변인자를 받고 있다. 리스트의 데이터를 모두 unpacking한 것을 variable input으로 넣기 위해 *primes
로 전달한다.
위에서는 가변 변수를 함수의 인자로써 사용했는데, list나 tuple data를 다른 변수에 가변적으로 unpacking하여 사용할 수도 있다.
numbers = [1, 2, 3, 4, 5, 6]
# unpacking의 좌변은 리스트 또는 튜플의 형태를 가져야하므로 단일 unpacking의 경우 *a가 아닌 *a,를 사용
*a, = numbers
# a = [1, 2, 3, 4, 5, 6]
*a, b = numbers
# a = [1, 2, 3, 4, 5]
# b = 6
a, *b, = numbers
# a = 1
# b = [2, 3, 4, 5, 6]
a, *b, c = numbers
# a = 1
# b = [2, 3, 4, 5]
# c = 6
참고: https://mingrammer.com/understanding-the-asterisk-of-python/
'Python > Basic programming' 카테고리의 다른 글
[PyCharm] Deployment 서버 연결해서 사용하기 (0) | 2020.04.14 |
---|---|
보수 개념과 파이썬 `~x` 연산 (Bitwise reversion) (0) | 2020.03.15 |
파이썬 비트 연산자 (Bitwise Operators) (0) | 2020.03.15 |
파이썬 연산자와 그에 대응하는 함수 (0) | 2020.03.15 |
문자열과 관련된 함수들 (0) | 2020.03.12 |