TIL | Get Ready for Django - 1

송치헌·2021년 7월 14일
0

*args, **kwargs

*args

*args : arguments (인자, 전달 인자)

def plus(a, b):
    return a+b
    
print(plus(1,2)) # 3

두 숫자를 입력받아 더하는 함수를 만들어 봤다.
그런데 이 함수는 두개의 숫자만 더할 수 있다. 더 많은 숫자를 더하고 싶으면 이렇게 사용해야 할 것이다.

def plus(a, b):
    return a+b
    
print(plus(1,plus(2,3)) # 6

하지만 10개, 극단적으로는 100개의 숫자를 더하고 싶다면 이렇게 일일이 작성하는 것은 무식한 짓이다.

여기서 사용하는 것이 바로 *args이다. 함수의 인자에 *args를 넣어주면 원하는 만큼 적어도 다 인자로 받아들여 들어온다.

def plus(*args):
    res = 0
    for num in args:
        res += num
    return res
    
print(plus(1,2,2,3,3,3,4,4,4,4)) # 30

이런 식으로 사용할 수 있다. print라는 함수가 원하는 만큼 안에 적어주면 그 만큼 다 출력해주는 것처럼 *args의 역할도 비슷하다.

**kwargs

**kwargs : keyword arguments

전달값 argument를 전달하는 방법중 하나가 positional argument이고 다른 하나가 keyword arguments이다. 위에서 봤던 plus(1,2,2,3,3,3,4,4,4,4)에서 이 숫자들은 다 positional argument이다. 말 그대로 정해진 위치에 있는 인자, 함수를 만들 때 parameter의 순서와 함수를 호출할 때 arguments의 순서 그대로 들어가는 인자이다. 예를 들어, def divide(a, b)라는 함수가 있고 divide(3,4)라는 호출 명령이 있으면 a = 3, b = 4로 들어가게 된다. 이것이 positional argument이다.

그러나 이렇게 순서대로 함수에 들어가지 않을 경우도 있다. keyword arguments를 이용하면 순서대로 입력하지 않아도 된다. 예를 들어서,
def divide(a, b)라는 함수가 있고 divide(b = 4, a = 3)이라고 호출하면 b에는 4, a에는 3이 들어간다. 이것이 바로 keyword arguments이다.

본격적으로 **kwargs를 어떻게 사용하는지 보자.

def hi_bye(**kwargs):
  for key, val in kwargs.items():
    print(f"{key}={val}")

hi_bye(a="hi",b="bye")

**kwargs에 들어오는 값은 딕셔너리 형태로 들어오게 된다. 위의 예시에서는 kwargs = { a : 'hi', b : 'bye'} 이렇게 말이다.

참고로 굳이 argskwargs로 쓰지 않아도 된다. 그냥 파이썬 사용자들 간의 암묵적인 약속이고, 꼭 저렇게 사용하지 않아도 된다.

profile
https://oraange.tistory.com/ 여기에도 많이 놀러와 주세요

0개의 댓글