관리 메뉴

개발이야기

[Python Skill] * (Asterisk) 사용법 본문

Python /Python Skill

[Python Skill] * (Asterisk) 사용법

안성주지몬 2019. 1. 15. 00:00


안녕하세요. 이번 포스팅에서는 * (Asterisk)의 사용법에 대해서 알아보도록 하겠습니다 !


첫 번재로는 곱셈 연산입니다. * 연산을 두 개의 변수 사이에 넣으면 두 변수의 곱을 계산할 수 있습니다. 


1) a * b (곱셈 연산) 


<예시 코드>


a = 3
b = 5
print(a*b)


<출력값>






다음은 거듭 제곱 연산입니다.


2) a ** b (거듭 제곱 연산)


<예시 코드>


a = 3
b = 5
print(a**b)


<출력값>



이러한 기본 연산외에 * 은 리스트, 튜플 같이 컨터이너 타입을 unpacking 할 때도 사용됩니다.


3) Unpacking 


<예시 코드>


mylist = [1,2,3]
mytuple = (4,5,6)
print("mylist: ",*mylist)
print("mytuple: ",*mytuple)


<출력값>



또한 * 연산을 이용해서 함수의 파라미터 값을 가변적으로 넘겨줄 수 있습니다.

이번 포스팅을 작성하는 이유중의 하나인데요. 이 가변적인 파라미터를 잘 사용할 수 있느냐 없느냐에 따라서

파이썬의 초급자와 중급자를 나누기도 합니다. 예시 코드를 통해서 한 번 살펴보도록 하겠습니다.


4) *args, **kargs


- *args 


먼저 *이 하나 붙은 *args를 보겠습니다. *args 를 사용하여 가변적인 파라미터를 넘겨줄 수 있습니다.

함수를 사용하다보면 인자의 갯수를 정확히 모르는 경우가 많이 발생하는데요.

이럴 때 *args가 아주 유용하게 사용될 수 있습니다.


<예시 코드>


def test_args(*args):
print(args)
print(args[0])
print(type(args))

args = ("two",3,5)
test_args(*args)


<출력값>



출력값을 보시면 *args 로 받은 파라미터값은 튜플로 묶여있는 것을 보실 수 있습니다. 따라서 파라미터를 사용하기 위해서 예시코드에서 처럼 인덱스로 접근하거나 *을 사용하여 Unpacking후 사용하실 수 있습니다.


또한 *args를 사용하여 리스트를 그대로 넘겨주는 것도 가능합니다.


<예시 코드>


def test_args(*args):
print(args)
print(args[0])
print(type(args))

mylist = [1,2,3,4]
test_args(*mylist)


<출력값>




리스트 타입으로 넘긴 값들이 튜플로 묶여 있는것을 확인할 수 있습니다.



- **kwargs


**이 두 개가 붙으면 키-값 타입에 가변적인 인자를 파라미터로 넘겨줄 수 있습니다. *이 하나만 붙는것과의 차이가 바로 넘겨주는 값의 타입입니다.


<예시 코드>


def add(a=0,b=0):
return a+b
d = {'a':2, 'b':3}
print(add(**d))


add함수 옆에 a =0, b=0 코드는 파라미터를 넘겨받지 않았을때 설정되는 디폴트 값입니다. 


<출력값>


**을 두개 붙여 줬기 때문에 a = 2 가 되고  b =3 이 되어 5가 출력된것을 확인할 수 있습니다.




아직까지 잘 이해가 안되실 수 있는데요 몇 개의 예제를 보시면 이해가 조금 더 되실 겁니다.


<예시 코드>


def adder(**kwargs):
print(kwargs)
for key,value in kwargs.items():
print("{} is {}".format(key,value))

num = {"arg3":3,"arg2":2,"arg1":5}
print(adder(**num))



<출력값>



** 은 keyword 타입의 변수를 넘겨주기 때문에 key-value 형태로 값을 반환해줄 수 있습니다.

또한 **은 keyword 타입이기 때문에 key 로 value 값을 접근할 수 있습니다.


<예시코드>


def test_args_kwargs(arg1,arg2,arg3):
print("arg3:",arg3)
print("arg2:",arg2)
print("arg1:",arg1)

args = ("two",3,5)

kwargs = {"arg3":3,"arg2":"two","arg1":5}
test_args_kwargs(**kwargs)


<출력값>



각 키에 해당하는 value값이 출력되는 것을 확인할 수 있습니다.



아직까지 이해가 조금 덜 되신 분들은 직접 이것저것 코딩을 해보시면서 결과값을 확인하시면 이해하시는데 많은 도움이 될 것입니다.

또한 아래의 참고 링크를 확인하시어 더 많은 레퍼런스들을 보시면 더 이해가 잘 될 것입니다.


* (Asterisk)는 정말 많은 곳에 유용하게 사용되기 때문에 이번 기회에 꼭 알아두고 가셨으면 좋겠습니다.


포스팅에 질문이 있으신 분들은 댓글 달아주시면 감사하겠습니다 !!


참고 

[1] http://book.pythontips.com/en/latest/args_and_kwargs.html

[2] https://python-reference.readthedocs.io/en/latest/docs/operators/dict_unpack.html

[3] https://mingrammer.com/understanding-the-asterisk-of-python/





Comments