티스토리 뷰
파이썬에서의 *args와 **kwargs의 개념과 예제에 대해 알아보고자 한다.
<목차>
- *args
- **kwargs
- *args와 **kwargs 같이 사용
- *args와 **kwargs를 같이 사용 시 주의점
- default 값을 넣고 싶을 경우
*args: (positional) arguments를 묶어서 튜플 형태로 전달
개수가 정해지지 않은 다수의 인자를 묶어서 한 개의 튜플 자료형을 전달하는 것
예를 들어, 여러 개의 정수들을 모두 더하는 함수를 만들자고 하자.
def func_sum(n1,n2,n3):
return n1+n2+n3
func_sum(1,2,3)
func_sum(10,20,30)
위 코드는 항상 세개의 수만 받아 그 합을 계산해준다.
근데 만약 세 개가 아닌, n개의 인자 (예. 10개든 100개든)를 받을 경우에는 위처럼 정의해서는 안된다.
그럼 positional argument의 개수를 정할 수 없을 때, *args 를 사용한다.
아래 코드는 n개의 인자를 받아 합을 계산할 수 있다.
def func_sum(*args):
print(args) # (1, 2, 3)
# (1, 2, 3, 4, 5)
func_sum(1,2,3)
func_sum(1,2,3,4,5)
l =[1,2,3]
def func_sum(*args):
print(args) # (1, 2, 3)
func_sum(*l)
**kwargs: keyword arguments를 묶어서 딕셔너리 형태로 전달
개수가 정해지지 않은 여러 개의 키워드 인자를 모두 묶어서 한개의 딕셔너리 자료형을 전달하는 것
예를 들어, 다음 코드는 여러 개의 n개의 키워드 인자를 받아 합을 계산할 수 있다.
def func(**kwargs):
print(kwargs) # {'a': 1, 'b': 2, 'c': 3}
return sum(kwargs.values())
func(a=1, b=2, c=3)
d = {'a':1, 'b':2, 'c':3}
def func(**kwargs):
print(kwargs) # {'a': 1, 'b': 2, 'c': 3}
return sum(kwargs.values())
func(**d)
class에서 **kwargs를 활용한 예제는 다음과 같다.
class A:
def __init__(self, **kwargs):
self.name = kwargs.get('name')
self.age = kwargs.get('age')
self.date = kwargs.get('date')
def print_A(self,):
print(f"name: {self.name}")
print(f"age: {self.age}")
print(f"date: {self.date}")
A_list= profile_list = {
"name": "해리포터",
"age": "17",
"date": "930101"}
A(**A_list).print_A()
*args와 **kwargs를 같이 사용
*args: 연속되는 positional argument
**kwargs: 연속되는 keyword argument
다음과 같이 *args와 **kwargs를 같이 사용할 수 있다.
def func(*args, **kwargs):
print(args) # (1, 2, 3)
print(kwargs) # {'a': 10, 'b': 20, 'c': 30}
func(1,2,3, a=10, b=20, c=30)
l =[1,2,3]
d = {'a':10, 'b':20, 'c':30}
def func_sum(*args, **kwargs):
print(args) # (1, 2, 3)
print(kwargs) # {'a': 10, 'b': 20, 'c': 30}
func_sum(*l,**d)
keyword argument가 나오기 전까지는 args 가 튜플로 먹고,
뒤 이어오는 keyword argument 는 kwargs 가 딕셔너리로 먹는다.
< *args와 **kwargs를 같이 사용 시 주의점>
*args와 **kwargs 순으로 작성해야한다.
그러나, *args와 **kwargs 순서를 바꿔쓰면 syntax error가 난다.
< default 값을 넣고 싶을 경우>
default 값을 가지는 keyword argument를 넣고 싶다면,
*args와 **kwargs 사이에 default 값을 넣어줘야한다.
def func(*args, i=100, j=200, **kwargs):
print(args) # (1, 2, 3)
print(i) # 100
print(j) # 200
print(kwargs) # {'a': 10, 'b': 20, 'c': 30}
func(1,2,3, a=10, b=20, c=30)
'파이썬' 카테고리의 다른 글
[Python 파이썬] join() 함수: 문자열 합치기 (0) | 2024.05.18 |
---|---|
[Python 파이썬] eval() 함수와 exec() 함수 개념 및 차이점, 예제 (0) | 2024.05.18 |
[Python 파이썬] 언패킹(unpacking) 개념과 예제 (0) | 2024.05.16 |
[Python 파이썬] eval() 함수: '수식' 연산 (0) | 2024.05.15 |
[Python 파이썬] 패킹(packing) 개념과 예제 (0) | 2024.05.15 |
- Total
- Today
- Yesterday
- adrew ng 머신러닝 강의
- numpy 배열 생성
- *args
- 백준
- 앤드류응
- state value function
- 비용함수
- baekjoon
- 경사하강법
- policy function
- **kwargs
- 강의노트 정리
- **
- Andrew Ng
- 손실함수
- sorted
- 로지스틱 회귀
- action value function
- computation graph
- 파이썬
- 딥러닝
- 11870
- 숏코딩
- Sort
- omp: error #15
- *
- 강화학습
- numpy 배열 속성
- NumPy
- python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |