[Python] Asterisk(*)

미남로그·2021년 12월 29일
0

Asterisk 강의 집중 안 돼서 한 세 번 다시 본 듯... **** 별표를 공부하고 정리해보겠습니다.


Asterisk

* 는 크게 4가지 용도로 사용됩니다.

  1. 곱셈 *
  2. 제곱 **
  3. 가변인자 *agrs **kargs
  4. unpacking

1, 2는 다 아실 거라 생각하고 3, 4를 다루고 넘어가겠습니다!


*args

def asterisk_test(a, *args):
    print(a, args)
    print(type(args))
    
asterisk_test(1,2,3,4,5,6)

Out:
1 (2, 3, 4, 5, 6)
<class 'tuple'>

asterisk_test라는 함수를 만들어주었는데, a에는 처음 값을 a에 넣고 나머지는 한꺼번에 받으라는 의미라고 합니다.

그래서 1 과 (2,3,4,5,6)이 나왔습니다.

임의의 개수의 인자를 받는 함수를 가리켜 가변 인자를 사용한다고 표현합니다.

강의에서는 여러 개의 변수를 한 꺼번에 받는 경우를 의미한다고 설명하였습니다.


**kargs

**kargs는 키워드 인자, 키워드 가변 인자라고 합니다.

def asterisk_test(a, **kargs):
    print(a, kargs)
    print(type(kargs))
    
asterisk_test(1,b=2,c=3,d=4,e=5,f=6)

Out:
1 {'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
<class 'dict'>

함수는 임의의 개수의 키워드 인자를 받습니다.

출력값을 확인해보면 추가적인 키워드를 딕셔너리로 전달하는 것을 볼 수 있습니다.

1은 a로 들어가고 나머지 b=2,c=3,d=4,e=5,f=6**kargs라는 변수에 dict type으로 들어가게 됩니다.

key, value를 지정해주는 것과 같은 형식인가 봅니다.


unpacking a container

  • tuple, dict 등의 자료형에 들어가 있는 값을 unpacking 해줍니다.

  • 함수의 입력값, zip 등에 유용하게 쓰입니다.

예시 코드를 살펴보겠습니다.

def asterisk_test(a, *args):
    print(a, args)
    print(type(args))
    
asterisk_test(1, *(2,3,4,5,6))

Out:
1 (2, 3, 4, 5, 6)
<class 'tuple'>

def asterisk_test(a, *args):
    print(a, *args)
    print(type(args))
    
asterisk_test(1, (2,3,4,5,6))

Out:
1 (2, 3, 4, 5, 6)
<class 'tuple'>

위의 두 코드는 같은 결괏값을 만드는 다른 방식이다!

unpacking의 예시를 더 살펴봐야 할 것 같다...

a, b, c = ([1,2], [3,4], [5,6])
print(a,b,c)

Out:
[1, 2][3, 4] [5, 6]

a, b, c의 변수에 list를 하나씩 unpacking 해주는 예시

data = ([1,2], [3,4], [5,6])
print(*data)

Out:
[1, 2][3, 4] [5, 6]

결괏값은 동일하다.

data의 변수에 list를 다 담아준 다음에 가변인자 *를 사용하여 unpacking한 예시

def asterisk_data(a,b,c,d):
    print(a,b,c,d)
    
data = {'b':1, 'c':2, 'd':3}

asterisk_data(10, **data)

Out:
10 1 2 3

10이 1로 들어가고 dict type의 data가 b, c, d의 변수에 각각 할당되며 unpacking 된다.

Summary

여기까지 asterisk(*)를 활용한 다양한 방법에 대해 알아보았다.

곱셈과 거듭 제곱에도 활용되지만

가변 인자로서의 활용도를 살펴볼 수 있는 시간이었다.


Reference

🔗 머신러닝을 위한 파이썬 강의

무료 강의입니다! 강추!

profile
미남이 귀엽죠

0개의 댓글