Python *, **의 의미

차보경·2022년 7월 21일
0

TIL

목록 보기
8/37
post-thumbnail
post-custom-banner

찾아본 이유

실습진행 중 *을 활용하는 코드가 나와 찾아보게 되었다.

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개로 미정일 때 사용한다고 한다.

추가로 정리하는 Python에서 *, **의 용도

주로 어떤 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. 그리고 둘다 함수에 다양한 수의 키워드 인수 / 매개 변수를 허용하기 위해 사용한다는 것.

역시 알면 알수록 쉬워지는 코딩의 세계~~~:) 근본을 잘 알자!!!

참고

profile
차보의 Data Engineer 도전기♥ (근데 기록을 곁들인)
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 6월 14일

감사합니다 ㅎㅎ덕분에 금방 배워서 갑니다

답글 달기