Search

Python 의 *

1. 곱() or 거듭제곱(*)

2. 리스트형 컨테이터 데이터 반복 확장

l = [1] # [1] l = l * 10 # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
Python
복사

3. 가변인자(Variadic Parameters) 사용

파이썬 인자 종류
1.
positional arguments
2.
keyword arguments
3.
variadic positional arguments
def save_ranking(first, second, third=None, fourth=None): rank = {} rank[1], rank[2] = first, second rank[3] = third if third is not None else 'Nobody' rank[4] = fourth if fourth is not None else 'Nobody' print(rank)
Python
복사
firstsecond라는 두 개의 positional arguments를 받으며 thirdfourth라는 두 개의 keyword arguments 받음
keyword arguments : 생략가능 ( default값이 들어감 ) 그러므로 positional argument이전에 들어가면 안됨.
가변인자의 경우
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'} - dict
Python
복사
args는 임의의 갯수의 positional arguments를 받음을 의미하며, *kwargs는 임의의 갯수의 keyword arguments를 받음을 의미한다. 이 때 args*kwargs 형태로 가변인자를 받는걸 packing이라고 한다.

4. 컨테이너타입 데이터 unpacking

from functools import reduce # reduce()는 입력받은 컨테이너 타입(iterable)을 지정한 함수에 따라 계산한 후 단일값으로 결과 반환 primes = [2, 3, 5, 7, 11, 13] def product(*numbers): p = reduce(lambda x, y: x * y, numbers) return p product(*primes) # 30030 product(primes) # [2, 3, 5, 7, 11, 13]
Python
복사
그냥 primes로 인자를 전달하면 primes 리스트 그 자체가 하나의 원소로 들거어가게되지만
*primes로 전달하면 unpacking되어 하나하나 인자로 전달된다.
tuple도 list와 정확히 동일하게 동작하며 dict의 경우  대신 ******을 사용하여 동일한 형태로 사용할 수 있다.
다른 형태의 unpacking : 이는 함수의 인자로써 사용하는게 아닌 리스트나 튜플 데이터를 다른 변수에 가변적으로 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
Python
복사
ab로 받는 부분들은 우변의 리스트 또는 튜플이 unpacking된 후, 다른 변수들에 할당된 값 외의 나머지 값들을 다시 하나의 리스트로 packing한다. 이는 3번에서 살펴본 가변인자 packing과 동일한 개념이다.