Python 일반 [python] *args 와 **kwargs

2021.07.24 14:08

졸리운_곰 조회 수:470

[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

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
15 [python 데이터분석] [jupyter] 주피터 노트북에 이미지 삽입 file 졸리운_곰 2025.09.06 561
14 [python 데이터분석] [Python] Streamlit 사용법 (python 데이터분석 웹 만들기) file 졸리운_곰 2024.12.22 517
13 [python 데이터분석] Anaconda : Error while loading conda entry point: conda-libmamba-solver (libarchive.so.19: cannot open shared object file: No such file or directory) 졸리운_곰 2024.12.14 560
12 [python 데이터분석] Anaconda | Conda update 반영 안됨(update 후에도 버전 변경 없음) file 졸리운_곰 2024.11.18 459
11 [python 데이터분석] Keeping Anaconda Up To Date 졸리운_곰 2024.05.30 563
10 [python 데이터 분석] 국내 경제 100대 통계지표 졸리운_곰 2024.02.18 693
9 [python 데이터 분석] Python 에서 R언어 패키지 호출 : Calling R From Python With rpy2 file 졸리운_곰 2024.01.28 700
8 [python 데이터 분석] 파이썬을 활용한 코스피, 달러 환율정보 수집부터 차트 시각화까지 file 졸리운_곰 2023.12.11 763
7 [Python 데이터분석][pandas] [Python pandas] DataFrame의 문자열 칼럼을 숫자형으로 바꾸기 : pd.to_numeric(), DataFrame.astype() file 졸리운_곰 2023.12.09 395
6 [Python 데이터분석] [Python 환경설정] VS code 설치 및 Anaconda와 연동하기 file 졸리운_곰 2023.03.17 539
5 [Python 데이터분석][python 데이터분석 프로덕션] [Python] Docker를 사용한 Dash 웹앱 생성 file 졸리운_곰 2021.12.10 417
4 [Python 데이터분석] [pandas] 공공데이터(csv) 활용시 한글 깨짐 현상 해결 file 졸리운_곰 2021.09.30 597
3 [Python 데이터분석] 공공데이터포털::공휴일 데이터 조회 (REST API) file 졸리운_곰 2021.09.30 376
2 [Python 데이터 분석] pandas의 to_csv()를 사용해서 csv 파일로 저장하기(save 하기) 졸리운_곰 2021.09.29 628
1 [Python 데이터 분석] 데이터 과학을 단순하게 만드는 3가지 Python 패키지 file 졸리운_곰 2021.09.24 520
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED