23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
가변인자(variadic arguments)란?
- 함수 parameter 개수가 정해지지 않았거나, 너무 많을 경우 사용
- parameter를 동적으로 처리함
- ex) print 함수
가변인자에 대해서 알아보도록 하겠습니다.
보통 print 함수처럼 인자의 개수를 미리 알 수 없거나, 인자의 개수가 너무 많아서 따로 정의하기 힘들경우 가변인자를 사용합니다.
python에서 가변인자를 입력 받는 방식은 크게 2가지 입니다.
-Positional 방식: 입력순서에 따른 list 형식 (*args)
- Keyword 방식: keyword를 포함한 dict 형식 (**kwargs)
아래는 가변인자를 입력받아서 출력해보는 간단한 예제입니다.
args는 Poritional 방식이고, **kwargs는 Keyword 방식입니다
[코드]
def vp_loc(*args):
print(args)
vp_loc(1, 2)
vp_loc(1, 2, 3, 4)
def vp_key(**kwargs):
print(kwargs)
vp_key(a=1, b=2)
vp_key(a=1, b=2, c=3, d=4)
[출력]
입력을 list 또는 dict 형태로 저장해서 출력합니다.
(1, 2)
(1, 2, 3, 4)
{'a': 1, 'b': 2}
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
물론 2가지를 동시에 혹은 일반 parameter 와 동시에 사용하는 것도 가능합니다.
다만, 이경우 Keyword 방식이 반드시 나중에 정의되어 있어야 합니다.
[코드]
def vp_loc_key(*args, **kwargs):
print(args, kwargs)
vp_loc_key(1, 2, a=1, b=2)
vp_loc_key(1, 2, 3, 4, a=1, b=2, c=3)
def vp_loc_key(p1, p2, *args, **kwargs):
print(p1, p2, args, kwargs)
vp_loc_key(1, 2, 3, 4, a=1, b=2, c=3)
[출력]
(1, 2) {'a': 1, 'b': 2}
(1, 2, 3, 4) {'a': 1, 'b': 2, 'c': 3}
1 2 (3, 4) {'a': 1, 'b': 2, 'c': 3}
[에러]
Positional, Keyword 방식을 섞어서 사용하거나, Keyword 방식을 먼저 정의하는 경우는 에러가 발생합니다.
>>> vp_loc_key(1, a=1, 2, b=2)
File "", line 1
SyntaxError: positional argument follows keyword argument
>>> def vp_loc_key_error(**kwargs, *args):
... print(args, kwargs)
...
File "", line 1
def vp_loc_key_error(**kwargs, *args):
^
SyntaxError: invalid syntax
[참고] packing/unpacking
가변인자에 사용되는 *, ** 연산자는 packing/unpacking 기능을 지원합니다.
가변인자에는 packing 기능이 활용된 것이고, (여러개의 parameter -> 하나의 컨테이너(list/dict 형태)로 변환)
unpacking 기능에 대해서도 간단히 알아보겠습니다. (하나의 컨테이너(list/dict/tuple/...) -> 여러개의 parameter 형태로 변환)
아래는 함수 호출시 unpacking 기능을 활용한 예제입니다.
tuple, dict 를 별도 처리 없이 함수의 인자로 바로 활용했습니다.
[코드]
def unpacking_func(a, b, c, d):
print(a, b, c, d)
input_tuple = (10, 11, 12)
unpacking_func(1, *input_tuple)
input_dict = {'b':10, 'c':11, 'd':12}
unpacking_func(1, **input_dict)
[출력]
1 10 11 12
1 10 11 12
감사합니다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.