[python] *args 와 **kwargs

1. *args and **kwargs

많은 파이썬 프로그래머 입문자들이 *args와 **kwargs라는 멋진 변수에서 헤맵니다. 그래서 뭘까요? 먼저 꼭 *args와 **kwargs 라는 이름으로 사용할 필요는 없다고 알려드리고 싶습니다. *별표만 꼭 사용하면 됩니다. *var**vars로 사용하셔도 됩니다. *args와 **kwargs는 관례처럼 사용할 뿐입니다. *args부터 먼저 살펴봅시다.

1.1 *args의 사용법

대부분 *args와 **kwargs는 함수를 정의 할 때 사용됩니다. *args와 **kwargs는 가변 갯수의 인자들을 함수에 넣어줍니다. 여기서 가변 갯수의 인자라 함은, 사용자들이 얼마나 많은 인자들을 함수에 넣을지 모르는, 즉 갯수가 변할 수 있는 상황에서 *args와 **kwargs를 사용할 수 있다는 뜻입니다.
*args는 키워드 되지않은 가변 갯수의 인자들을 함수에 보낼 때 사용합니다. 좀 더 명확하게 예를 들어보겠습니다.

def test_var_args(f_arg, *argv):
    print ("첫 번째 인자:", f_arg)
    for arg in argv:
        print ("*argv의 다른 인자", arg)

tast_var_args('야숩', 'python', '달걀', 'test')

다음과 같은 결과를 반환합니다.

첫번째 인자: 야숩
*argv의 다른 인자: python
*argv의 다른 인자: 달걀
*argv의 다른 인자: test

여러분들이 가지고 있던 헷갈린 부분이 해결되었으리라 생각합니다. 그러면 이제 **kwargs에 대해서 알아봅시다.

1.2 **kwargs의 사용법

**kwargs는 키워드된 가변 갯수의 인자들을 함수에 보낼 때 사용합니다.(역주: 가장 큰 차이는 keyword이냐 nonkeyword이냐입니다.) **kwargs는 함수가 이름이 지정된 인자를 처리할 때 사용해야합니다. 아래의 예시를 보겠습니다.

# python2.7.9
def greet_me(**kwargs):
    if kwargs is not None:
        for key, value in kwargs.iteritems(): # python3: kwargs.items()
            print "%s == %s" % (key, value) # python3: print("%s == %s" % (key, value))

>>> greet_me(name="yasoob")
name == yasoob

함수에서 어떻게 키워드된 전달인자 리스트를 다룰 수 있는지 보았습니다. 위 예시는 단지 **kwargs의 기본적인 방법일 뿐이고, 이것이 얼마나 유용한지 알게될 것입니다. 전달하고자 하는 인자들의 리스트나 사전(dictionary)을 가지고 함수를 호출하기 위해서 *args, **kwargs를 사용하는 방법을 알아보겠습니다.

1.3 함수를 호출하기 위한 *args와 **kwargs

*args와 **kwargs를 사용해서 어떻게 함수를 호출 알아보겠습니다. 아래의 간단한 함수만 생각해보겠습니다.

def test_args_kwargs(arg1, arg2, arg3):
        print ("인자1:", arg1)
        print ("인자2:", arg2)
        print ("인자3:", arg3)

이제 위의 간단한 함수에게 인자를 전달하기 위해 *args 혹은 **kwargs를 사용할 수 있습니다. 아래와 같이 사용합니다:

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

# *args의 첫번째
>>> args = ("two", 3, 5)
>>> test_args_kwargs(*args)
인자1: two
인자2: 3
인자3: 5

# 이제 **kwargs:
>>> kwargs = {"arg3": 3, "arg2": "two", "arg1": 5} # 키는 위 함수의 매개변수의 이름과 같아야합니다.
>>> test_args_kwargs(**kargs)
인자1: 5
인자2: two
인자3: 3

*arg, **kwargs, 형식 인자(format args)의 사용순서

위 3가지를 함수에서 동시에 사용하려면 아래와 같이 사용합니다.

some_func(fargs, *args, **kwargs)

1.4 언제 사용할까요?

목적에 따라 달라집니다. 일반적으로 함수의 데코레이터(다른 챕터에서 이야기를 나눌 것입니다)를 만들 때 사용합니다. 몽키 패칭을 할 때도 사용할 수 있습니다. 몽키 패칭은 런타임(실행) 중에 코드 일부를 수정한다는 것입니다. API를 호출하고 응답데이터를 반환하는 get_info라는 함수가 들어있는 클래스가 있다고 생각해보세요. API를 호출하고 어떤 테스트 데이터로 바꾸는 코드를 만든다면 아래와 같이 할 수 있습니다.

import someclass

def get_info(self, *args):
    return "Test Data"

someclass.get_info = get_info

이제 다른 상황에서도 잘 활용할 수 있을 것이라고 생각합니다.

 

[출처] https://ddanggle.gitbooks.io/interpy-kr/content/ch1-args-kwargs.html

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
371 [python][image processing][파이썬][이미지프로세싱] 파이썬 영상 처리 (OpenCV) file 졸리운_곰 2021.11.12 29
370 [python] Python Console Input & Output Tutorial 졸리운_곰 2021.11.06 20
369 [Python 데이터분석] [pandas] 공공데이터(csv) 활용시 한글 깨짐 현상 해결 file 졸리운_곰 2021.09.30 13
368 [Python 데이터분석] 공공데이터포털::공휴일 데이터 조회 (REST API) file 졸리운_곰 2021.09.30 54
367 [Python 데이터 분석] pandas의 to_csv()를 사용해서 csv 파일로 저장하기(save 하기) 졸리운_곰 2021.09.29 16
366 [Python 데이터 분석] 데이터 과학을 단순하게 만드는 3가지 Python 패키지 file 졸리운_곰 2021.09.24 48
365 [Python][Dash] DASH PLOTLY 설치부터 튜토리얼까지 졸리운_곰 2021.09.11 68
364 python - 국가공휴일 데이터 가져오기 (data.go.kr) file 졸리운_곰 2021.09.05 34
363 [python][web] Separate Front-end from Back-end with Flask+AJAX file 졸리운_곰 2021.08.13 11
362 [python][파이썬 조건문(if-elif-else)] 졸리운_곰 2021.07.24 26
361 [python] 파이썬 for 문 졸리운_곰 2021.07.24 19
360 [python][파이썬 기초] 48 파이썬으로 파일 만들기 졸리운_곰 2021.07.24 30
359 [Python] UnicodeEncodeError: 'ascii' codec can't encode file 졸리운_곰 2021.07.24 36
358 [python] *args 와 **kwargs 사용하기 - 슬기로운 파이썬 트릭 中 file 졸리운_곰 2021.07.24 39
» [python] *args 와 **kwargs 졸리운_곰 2021.07.24 18
356 [python] 파이썬 f-string (파이썬 스트링 앞에 f') file 졸리운_곰 2021.07.17 42
355 [Python] 파이썬으로 복리 계산하기 file 졸리운_곰 2021.07.17 48
354 [python, 파이썬] 연습 문제: 복리 이자 계산 졸리운_곰 2021.07.17 602
353 python - 읽은 후 kafka 메시지를 삭제하는 방법 졸리운_곰 2021.07.13 326
352 [scrapy] https://pypi.org/project/scrapy-save-as-pdf/ 졸리운_곰 2021.07.03 75
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED