[Python] *args **kwargs

Jeongyun Heo·2020년 12월 27일
0

Python

목록 보기
15/36
post-thumbnail

노마드 코더 Python으로 웹 스크래퍼 만들기
https://nomadcoders.co/python-for-beginners

파이썬 코딩 도장
https://dojang.io/mod/page/view.php?id=2345

3.1 *args **kwargs

✍️  *args

인수의 개수가 정해지지 않은 가변 인수(variable argument)에 사용한다. 즉, 같은 함수에 인수 한 개를 넣을 수도 있고, 열 개를 넣을 수도 있다. 또는, 인수를 넣지 않을 수도 있다.

관례적으로 arguments를 줄여서 args로 사용

함수에 무제한으로 arguments를 넣을 수 있다.

입력값이 몇 개이든 상관이 없다.
입력값을 전부 모아서 하나의 튜플로 만들어 주기 때문이다.

*args처럼 매개변수 이름 앞에 *을 붙이면 입력값을 전부 모아서 튜플로 만들어 준다.
args튜플이라서 for로 반복할 수 있다.

def add_many(*args):
  print(args)  # args 출력
  result = 0
  for i in args:
    result = result + i
  return result

result = add_many(1,2,3)

👉 (1, 2, 3)  # 입력값을 모아서 튜플로 만들어 준다.
def add_many(*args):
  print(args)  # args 출력
  result = 0
  for i in args:
    result = result + i
  return result

result = add_many(1,2,3,4,5,6,7,8,9,10)
print(result)  

👉 
(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) # 입력값을 전부 모아서 튜플로 만들어 줌
55 

📔  고정 인수와 가변 인수를 함께 사용하기

*args는 단독으로만 사용 가능 한 게 아니다.
다른 매개변수와 같이 써도 된다.

고정 인수와 가변 인수를 함께 사용할 때는 고정 매개변수를 먼저 지정하고, 그 다음 매개변수에 *를 붙여주면 된다. 매개변수 순서에서 *args는 반드시 가장 뒤쪽에 와야 합니다.

def add_mul(choice, *args): # *args는 반드시 가장 뒤쪽에 둔다.
  print(choice, args)  # 매개변수 둘 다 출력
  if choice == "add":
    result = 0
    for i in args:
      result = result + i
  elif choice == "mul":
    result = 1
    for i in args:
      result = result * i
  return result

result = add_mul('mul', 1, 2, 3)
print(result) 

👉
mul (1, 2, 3) # args만 튜플 형태이다.
6

📚  *args를 이용하여 무한 계산기 만들기

입력 받은 모든 숫자를 더한다.

def plus(*args):
    result = 0
    for number in args:
        result += number
    print(result)

plus(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

👉 55

✍️  **kwargs

파이썬 코딩 도장
https://dojang.io/mod/page/view.php?id=2347

인수의 개수가 정해지지 않은 가변 인수(variable argument)에 사용한다. 즉, 같은 함수에 인수 한 개를 넣을 수도 있고, 열 개를 넣을 수도 있다. 또는, 인수를 넣지 않을 수도 있다.

키워드 파라미터를 사용할 때는 매개변수 앞에 별 두 개(**)를 붙인다.
**kwargs처럼 매개변수 이름 앞에 **을 붙이면 매개변수 kwargs는 딕셔너리가 되고 모든 key=value 형태의 결괏값이 그 딕셔너리에 저장된다.

관례적으로 keyword arguments를 줄여서 kwargs로 사용
kwargs딕셔너리라서 for로 반복할 수 있다.

인수를 직접 넣어도 되고 딕셔너리 언패킹을 사용해도 된다.
※ 딕셔너리 언패킹: 딕셔너리를 만들고 딕셔너리 앞에 **를 붙여서 인수로 입력하면 된다.

def print_kwargs(**kwargs):
  print(kwargs)

print_kwargs(a) # 입력값을 a=2 이런 식으로 줘야 되는데 그냥 a만 써서 오류남

👉
Traceback (most recent call last):
  File "main.py", line 4, in <module>
    print_kwargs(a)
NameError: name 'a' is not defined

다시 값을 제대로 입력해준다.

def print_kwargs(**kwargs):
  print(kwargs)  # kwargs 출력

print_kwargs(a=2) # 입력값을 key=value 형태로 쓰니까 오류 안 남

👉
{'a': 2}  # kwargs는 딕셔너리 형태

마찬가지로 매개변수에 **kwargs 썼다고 다른 매개변수 같이 못 쓰는 거 아님

def print_kwargs(num, **kwargs):
  print(num, kwargs)  # 매개변수 둘 다 출력

print_kwargs(4, a=2)

👉
4 {'a': 2}   # kwargs만 딕셔너리 형태로 나옴
def plus(a, b, *args, **kwargs):
    print(args, kwargs)  # 매개변수 a, b는 출력 안 함
    return a + b

plus(1, 2, 3, 4, 5, 6, 7, 8, 9, 10,hello=True)

👉
(3, 4, 5, 6, 7, 8, 9, 10) {'hello': True} # args는 튜플, kwargs는 딕셔너리로 나옴

✍️  positional argument (위치 인수)

함수에 인수를 순서대로 넣는 방식을 위치 인수(positional argument)라고 한다. 즉, 인수의 위치가 정해져 있다.

plus(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

✍️  keyword argument (키워드 인수)

파이썬에서는 인수의 순서와 용도를 매번 기억하지 않도록 키워드 인수(keyword argument)라는 기능을 제공한다.
키워드 인수는 말 그대로 인수에 이름(키워드)을 붙이는 기능인데 key=value 형식으로 사용한다.
키워드 인수를 사용하면 인수의 순서를 맞추지 않아도 키워드에 해당하는 값이 들어간다.

key=value 형식

a=2
name=”bori”

0개의 댓글