이것은 파이썬에서 무엇을 의미합니까: *args, **kwargs?

Python을 처음 사용하는 경우 학습 경험 중에 직면하게 될 한 가지 걸림돌은 *args 및 **kwargs 마법 변수를 이해하는 것입니다. 저도 처음 시작할 때 어떻게 작동하는지 이해하기가 어려웠습니다.

 def args_kwargs(*args, **kwargs):
      pass


Python *args 및 **kwargs 인수는 어디에나 있습니다. 가장 인기 있는 Python 프레임워크(Django) 중 하나의 소스 코드에서 찾을 수 있습니다.
변수 *args 및 **kwargs는 어떤 형식으로든 작성할 수 있습니다. 예: *vars 및 **kvars도 유효합니다. *(별표)만 필요합니다.
이번 강의에서는 그것들이 무엇인지, 어떻게 사용하는지 설명하겠습니다 😎.

함수 정의에서 *args 사용:



*args는 함수 정의에서 사용할 수 있습니다. 사용자가 여러 변수 인수를 사용하여 함수를 호출할 수 있습니다. 여기서 변수는 사용자가 함수에 전달할 인수의 수를 미리 알지 못함을 의미하므로 이 경우 *args 키워드를 사용합니다. *args를 사용하면 이전에 정의한 형식 인수 수보다 더 많은 인수를 사용할 수 있습니다. 내부적으로 튜플 데이터 구조를 사용하여 표현됩니다.
가변 인수 수 앞에 0개 이상의 일반 인수가 발생할 수 있습니다.

*args 사용에 대한 흥미로운 예:

def positions(first_arg, *args):
    print(f"Type of *args is {type(args)}") #print type of args
    print(f"first position arg:{first_arg}")
    for arg in args:
        print(f"another arg through *args: {arg}")

positions('first','second','third','forth')
#results
Type of *args is <class 'tuple'>
first position arg:first
another arg through *args: second
another arg through *args: third
another arg through *args: forth


함수 정의에서 **kwargs 사용:



함수 정의의 특수 구문 **kwargs는 키워드가 있는 가변 길이 인수 목록을 전달하는 데 사용됩니다.
**kwargs를 사용하면 키워드가 지정된 가변 길이 인수를 함수에 전달할 수 있습니다. 내부적으로는 사전 데이터 구조를 사용하여 표현됩니다.
다음은 이 개념을 설명하는 기본 예입니다.

def items(**kwargs):
    print(f"Type of **kwargs is {type(kwargs)}") #print type of **kwargs
    #iterating over the keyword argument
    if kwargs is not None:
        for key, value in kwargs.items():
            print(f"{key} = {value}")

items(a="basket", b="plate", c="soap")
#results
Type of **kwargs is <class 'dict'>
a = basket
b = plate
c = soap


위의 예에서 *args 및 *kwargs를 사용하면 함수 정의에 무제한의 인수를 수용할 수 있는 유연성이 있음을 알 수 있습니다.
함수를 호출할 때 **args** 및 **kwargs를 사용하는 몇 가지 예를 살펴보겠습니다.

*args는 Python의 반복 가능한 객체(목록, 튜플)에서 값을 압축 해제하는 데 사용할 수 있습니다.

def test_args_kwargs(arg1,arg2,arg3):
     print(f"{arg1},{arg2},{arg3}")

#using tuple
test_args_kwargs(*('first','second','third'))
#OR
test_args_kwargs(*['first','second','third'])

#results
first,second,third #unpacking tuple
first,second,third #unpacking list



**kwargs는 사전 압축을 푸는 데에만 사용할 수 있습니다.

# now with **kwargs:
kwargs = {"arg1": "first", "arg2": "second","arg3":"third"}
test_args_kwargs(**kwargs)
#results
arg1: first
arg2: second
arg3: third


*args **kwargs 및 formal args 사용 순서



매개변수의 올바른 순서는 다음과 같습니다.
표준 인수
*args 인수
**kwargs 인수

다양한 유형의 매개변수를 결합하는 방법을 살펴보겠습니다.

#right
def my_func(args, *args, **kwargs):
    pass

#wrong
def my_func(args, **kwargs, *args):
    pass



보너스
*를 사용하여 할당 중에 값을 수집할 수도 있습니다.

first,*others = ["first","second","third"]
print(first,others, sep="\n")
#results
first
['second', 'third']


이제 Python에서 함수를 정의하거나 호출할 때 *args 및 **kwargs를 사용하는 방법을 명확하게 이해하셨기를 바랍니다.
질문이 있으시면 아래에 의견을 남겨주세요.

다음 주에는 멀티스레딩과 멀티프로세싱을 사용하여 프로그램 속도를 높이는 방법을 설명하겠습니다. :) 저를 팔로우하고 알림을 켜주세요. 고맙습니다!
즐거운 코딩! ✌

좋은 웹페이지 즐겨찾기