행궁동 데이터 엔지니어

반응형

Python에서 *args와 **kargs를 이용해서 함수 인자(argument)를 입력받는 방법입니다.

핵심부터 이야기하면 *, **접두사는 가변 길이 매개변수(parmeter)입니다.

 

  • *args : *arguments의 줄임말
  • **kargs : **keyword arguments의 줄임말
  • 매개변수 이름 앞에 '*', '**' 지시어가 있으면 각각 *arg, **kargs로 인식 (매개변수 이름은 중요하지 않음)
  • ex) *args, *agrs_nm, *abcde, **kargs, **kabcde 이처럼 사용 가능

 

예시 코드 (*arg, **kargs를 매개변수로 가지고 있는 함수 생성)

 

Python 함수 들을 보면 아래와 같이 *arg, **kargs가 매개변수(parameter)로 있는 함수를 보신 적 있을 겁니다.

# *arguments 에시
def print_input(*args):
    type_value_check = "{0} : {1}".format(type(args), args) 
    print(type_value_check)
    
    for value in args:
        print(value, end = " ")
    print("")
 
 # *keyword arguments 예시
 def print_subject_score(**kargs):
    type_value_check = "{0} : {1}".format(type(kargs), kargs) 
    print(type_value_check)
    
    for key, value in kargs.items():
        subject_score = "{0} is {1}".format(key, value)
        print(subject_score)

*arg :  인자들(arguments)을 가변 길이로 입력받은 후  하나의 튜플로 만들어 함수 내에서 사용

**kargs :  (key=value) 형태의 인자들을 가변 길이로 입력받은 후 Dictionary로 만들어 함수 내에서 사용

 

*arg 예시 코드

  • 인자들(arguments)을 가변 길이로 입력받은 후  하나의 튜플로 만들어 함수 내에서 사용
  • 국어, 수학, 영어를 입력 받든, 국어~음악까지 6과목을 입력 받든 가변 길이로 잘 동작 
  • 지시어 `*`(별문자, asterisk)만 있다면 뒤에 매개변수 명칭은 상관없음 ex) *args, *abcde
def print_input(*args):
    type_value_check = "{0} : {1}".format(type(args), args) 
    print(type_value_check)
    
    for value in args:
        print(value, end = " ")
    print("")
    
print_input('국어', '수학', '영어')
print_input('국어', '수학', '영어', '과학', '사회', '음악')

----- 출력(Output) ------
>>> <class 'tuple'> : ('국어', '수학', '영어')
>>> 국어 수학 영어 
>>> <class 'tuple'> : ('국어', '수학', '영어', '과학', '사회', '음악')
>>> 국어 수학 영어 과학 사회 음악 

*kagrs 예시 코드

  • (key=value) 형태의 인자들을 가변 길이로 입력받은 후 Dictionary로 만들어 함수 내에서 사용
  • `*`args와 마찬가지로 지시어 `**`만 있다면 뒤에 매개변수 이름은 무엇이든 상관없음
def print_subject_score(**kargs):
    type_value_check = "{0} : {1}".format(type(kargs), kargs) 
    print(type_value_check)
    
    for key, value in kargs.items():
        subject_score = "{0} is {1}".format(key, value)
        print(subject_score)

----- 출력(Output) -----
>>> print_subject_score(korean=97, math=96, english=94)

 

 

일반 매개변수와 가변 길이 매개변수(*args, **kagrs) 동시 사용 시 주의사항

  • 일반 매개변수, *arg, **kargs 순서로 사용해야 함
def parameter_order(normal, *args, **kargs):
...

parameter_order('normal_arg', 'arg1', 'arg2', a=10, b=20, c=30)

 

 

기타 궁금하신 사항은 댓글 남겨주세요 ^^

+ 혹시 몰라 Jupyter Notebook 파일도 남깁니다.

 

[Python]args_kargs.ipynb
0.00MB

 

감사합니다.

 

참고자료

1. '개미'님 브런치, [나름 중급 파이썬1] *args, **kargs, https://brunch.co.kr/@princox/180
2. 'dev.jun94.log', [Python] *args와 **kwargs, https://velog.io/@hj8853/Python-args%EC%99%80-kwargs
3. 제타위키, 파이썬 가변길이 매개변수 *args, **kwargs, https://zetawiki.com/wiki/%ED%8C%8C%EC%9D%B4%EC%8D%AC_%EA%B0%80%EB%B3%80%EA%B8%B8%EC%9D%B4_%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98_*args,_**kwarg
4.TAEWAN.KIM블로그, argument와 parameter 차이점, http://taewan.kim/tip/argument_parameter/
반응형

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band