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

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
57 [python 인공지능] Deploy ML models with FastAPI, Docker, and Heroku | Tutorial 졸리운_곰 2025.07.08 491
56 [python 인공지능] [VSCode] VSCode에서 ipynb 파일을 HTML(PDF 등..)로 졸리운_곰 2025.05.27 309
55 [Python 인공지능] [파이썬을 이용한 한글 NLP] 03. 간단한 키워드 추출기 졸리운_곰 2025.01.29 505
54 [Python 인공지능] [ 한글 키워드 시각화 ] 파이썬 python 텍스트 마이닝 한글 ( 워드 클라우드 WordCloud, squrify 트리맵으로 빅데이터 마스터) file 졸리운_곰 2025.01.29 418
53 [Python 인공지능] 기계 학습의 A to Z : IPython notebook과 scikit-learn을 활용한 기계 학습 file 졸리운_곰 2024.08.10 554
52 [python] 인공지능 python : 한글 문서 자동 요약 - lexrank 졸리운_곰 2023.07.06 414
51 [python] 인공지능 katiehouse / django-scikit-learn-tutorial file 졸리운_곰 2023.06.03 674
50 [python] [Anaconda]가상환경 설치,삭제 file 졸리운_곰 2022.12.03 457
49 [python][머신러닝] Scikit-learn Tutorial: Machine Learning in Python file 졸리운_곰 2022.11.29 533
48 [python] 파이썬(sklearn) 사이킷런(sklearn) 기초 졸리운_곰 2022.08.20 329
47 [python] scikit-learn이란 file 졸리운_곰 2022.08.20 486
46 [anaconde3][python] Create environment for tensorflow 1.4 in Anaconda 3 졸리운_곰 2022.07.02 597
45 [python][인공지능] [TensorFlow] Anaconda 가상환경 이용하여 TensorFlow GPU 설치 졸리운_곰 2022.01.20 472
44 [Python 인공지능] TextRank 를 이용한 키워드 추출과 핵심 문장 추출 (구현과 실험) file 졸리운_곰 2021.11.22 616
43 [python][인공지능] FLASK를 이용하여 PYTHON에서 PYTORCH를 REST API로 배포하기 졸리운_곰 2021.03.20 394
42 [python 파이썬] Creating REST API for TensorFlow models file 졸리운_곰 2021.02.01 502
41 [python 파이썬 인공지능] Keras 모델을 REST API로 배포해보기 file 졸리운_곰 2021.02.01 424
40 [파이썬 머신러닝] Scikit-learn 기초 졸리운_곰 2020.01.31 627
39 파이썬으로 간단한 뉴럴 네트워크 만들기 How to Create a Simple Neural Network in Python file 졸리운_곰 2020.01.29 22711
38 Keras를 활용한 주식 가격 예측 file 졸리운_곰 2019.02.25 1039
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED