Python의 ** (double asterisk) 연산자는 keyword argument와 dictionary unpacking 에 사용됨.

파이썬에서 ** (더블 애스터리스크, 또는 더블 스타) 연산자는 다음의 역할을 수행함:
dict객체 관련 연산- function 정의와 호출 시 keyward arguments를 유연하게 처리 (packing 과 unpacking)
**kwargs: 함수 정의 시 variable keyword parameter (가변 키워드 매개변수) 정의 (Packing)
function(함수)를 정의(definition)할 때 parameter(매개변수) 이름 앞에 **를 붙이면, 해당 function은 개수에 제한 없이 keyword arguments를 받을 수 있게 됨..
이러한 arguments는 함수 내부에서 dict 객체로 수집함.
- variable keyword arguments를
dict객체로 수집:- 예를 들어,
func_kwargs(**kwargs)와 같은 function definition에서, func_kwargs(key1=1, key2=2, key3=3)와 같이 함수를 호출(call)하면,- 이 keyword arguments는
{'key1': 1, 'key2': 2, 'key3': 3}과 같은dict객체로kwargs변수에 저장됨.
- 예를 들어,
- 이름의 관례:
**kwargs는 주로 사용되는 관례적인 이름임.**words처럼 다른 이름을 사용해도 상관없음.- 중요한 것은
**연산자의 사용임.
- 다른 parameters와의 사용:
**kwargs는 일반적인 positional parameters 및 variable positional parameter인*args와 함께 사용될 수 있음- 하지만 함수 정의 시 `kwargs`는 반드시 마지막 매개변수로 위치해야 함**.
- 만약 뒤에 다른 parameter(매개변수)가 오면
SyntaxError가 발생. - parameter매개변수의 올바른 순서는 표준 인자 ->
*args인자 -> `kwargs` 인자** 임. - 이 순서를 지키지 않으면 오류가 발생할 수 있음.
**: 함수 호출 및 딕셔너리 언패킹 (Unpacking)
** 연산자는 함수를 호출(call)할 때 dict의 키-값 쌍을 개별 keyword argument로 풀어서 전달하는 데 사용됨.
- function call 시
dict객체 unpakcing:dict객체 앞에**를 붙여 function call을 수행하면,dict객체의 내용이 풀어져서 각각 함수의 keyword argument로 전달됨- 예를 들어
d = {'arg1': 100, 'arg2': 200}이라는dict객체가 있을 때, func_kwargs_positional(**d)처럼 호출하면arg1=100,arg2=200과 같이 전달됨- 이 경우, 딕셔너리의 키는 함수의 매개변수 이름과 일치해야 합니다.
- dictionary 병합:
**연산자는 여러 딕셔너리의 요소를 하나의 새로운 딕셔너리로 병합하는 데도 활용 가능함.- 예를 들어
my_merged_dict = {**my_first_dict, **my_second_dict}는 - 두
dict객체를 합쳐 새로운dict객체를 생성할 수 있음.
- string formating에서의 활용:
str.format()메서드와 함께**를 사용하면 딕셔너리의 데이터를 깔끔하게 문자열에 삽입할 수 있음.
* (single asterisk)와의 차이점
*와 **는 모두 unpacking operator 이지만, 사용 대상과 목적에 차이점을 가짐.
*(single asterisk):- list, tuple, string 등 **
Iterable객체의 items를 개별 위치 인자로 unpacking하거나 (function call 시), - 숫자가 안 맞는 남은 item들을 tuple 객체로 수집하는 (함수 정의 시
*args) 데 사용됨. - assignment 시
*는 초과된 items을 list로 수집 (function call 과 차이점).
- list, tuple, string 등 **
- `` (double asterisk)**:
dict객체에만 사용되며,- dictionary의 키-값 쌍을 keyword argument로 풀거나 (function call 시),
- keyword arguments를 dictionary로 수집하는 (함수 정의 시 `kwargs`) 데 사용됨.
같이 보면 좋은 자료
2023.07.30 - [Python] - [Python] asterisk * 사용하기 : unpacking, packing
[Python] asterisk * 사용하기 : unpacking, packing
C언어에서 pointer 연산자인 * (asterisk)는 Python에서 상당히 낯설게 동작한다.(특히, PEP3132, PEP448 등에서 그 기능이 무지 많아져서... --;;) double asterisk ** (이문서에선 다루지 않으나, variable keyword argumen
ds31x.tistory.com
2024.02.04 - [Python] - [Python] Parameter 의 종류 - Slash and Asterisk for Function Parameters
[Python] Parameter 의 종류 - Slash and Asterisk for Function Parameters
Function의 헤더에서 parameters 를 정의하는데,해당 parameters 중,어떤 것들이 positional parameters 로만 사용가능한지,어떤 것들이 일반적인 parameters로서 positional parameters 또는 keyword parameters 모두 사용가
ds31x.tistory.com
'Python' 카테고리의 다른 글
| Jupyter NoteBook-vscode 확장 중심 (4) | 2025.07.21 |
|---|---|
| ipynb 파일 (IPython NoteBook) (5) | 2025.07.17 |
| Pillow에서 Image 객체의 주요 attribute. (1) | 2025.07.15 |
| [Ex] PyAutoGUI - MessageBox (0) | 2025.07.15 |
| [Ex] PyAutoGUI - hotkey 조합 입력하기 (0) | 2025.07.15 |