실습진행 중 *
을 활용하는 코드가 나와 찾아보게 되었다.
from tensorflow.keras.models import *
=> tensorflow.keras.models 에 있는 모든 값을 받아오겠다는 뜻
def build_augmentation(is_train=True):
if is_train:
...
augumentation_test = build_augmentation(is_train = False)
...
image_data = {'image' : image}
resized = augumentation_test(**image_data)
=> **
는 image_data가 딕셔너리 형태니까 그 중에서 value값을 넣겠다 는 것. 우리가 함수에 넣고싶은건 name(key)인 image가 아니라 데이터 image니까!
(+ *
는 dictionary key값으로 들어감!)
처음엔 이걸로 def ~~~(int(abc))이런식으로 함수 인자의 형태를 고정하겠다는 뜻인가? 했는데, 여기서는 그냥 함수 인자로 넣으려는게 dict 형태라서 둘중에 value 값을 넣기위해서 사용한 것이다.
그리고 나중에 찾아보니 def ~~(**kwargs) 의 형태로도 쓰이는데 이는 형태 고정보다는 parameter값이 n개로 미정일 때 사용한다고 한다.
*
, **
의 용도주로 어떤 parameter값을 넣을 때 몇 개가 들어갈지 모르는 경우 사용한다고 한다.
(args, kwargs가 무슨 약자인지도 이번에 처음 알았다....ㅋㅋ쿠ㅜㅜㅜ)
*args
(arguments) : list of arguments - as positional arguments**kwargs
(keyword arguments) : dictionary - whose keys become separate keyword arguments and the values become values of these arguments.💡 간단히 말하자면,
1.*
는 list or tuple!**
은 dictionary! 라고 볼 수 있겠다.
2. 그리고 둘다 함수에 다양한 수의 키워드 인수 / 매개 변수를 허용하기 위해 사용한다는 것.
역시 알면 알수록 쉬워지는 코딩의 세계~~~:) 근본을 잘 알자!!!
감사합니다 ㅎㅎ덕분에 금방 배워서 갑니다