이것은 연산자가 아니므로 실제로 이름이 없지만 "구문 규칙"으로 정의됩니다 . 따라서 다음과 같이 호출해야합니다.
당신이 인수 목록이있는 경우 *args
,이라고 "인수 풀기" 같은 방식으로 **kwargs
호출 "키워드 인수 풀고" .
당신이의 왼쪽에 그것을 사용하는 경우 =
, 같은에서 a, *middle, end = my_tuple
, 당신은 말할 것 "튜플 풀고" .
전체적으로 세 가지 유형의 (단일 매개 변수) 인수가 있습니다.
def f(x) # x: positional argument
def f(x, y=0) # y: keyword argument
def f(x, *xs, y=0) # y: keyword-only argument
*args
인수는 "변수 위치 매개 변수"를 호출 **kwargs
은 "변수 키워드 매개 변수"입니다. 가변 위치 매개 변수는 전달한 모든 인수를 사용하므로 키워드 전용 인수는 위치 적으로 지정할 수 없습니다.
이 중 대부분은 PEP 0362 및 3102 와 문서 의 제어 흐름 섹션 에서 찾을 수 있습니다 . 함수 시그니처 오브젝트 PEP는 초안 일 뿐이며 용어는 한 사람의 아이디어 일 수 있습니다. 그러나 어쨌든 그들은 좋은 용어입니다. :)
따라서 *
and **
인수는 해당 데이터 구조의 압축을 풉니 다.
args = (1, 2, 3) # usually a tuple, always an iterable[1]
f(*args) → f(1, 2, 3)
# and
kwargs = {"a": 1, "b": 2, "c": 3} # usually a dict, always a mapping*
f(**kwargs) -> f(a=1, b=2, c=3)
[1] : 반복 가능 객체는 객체 구현 __iter__()
방법 및 맵핑 구현 객체 keys()
와 __getitem__()
. 이 프로토콜을 지원하는 모든 객체는 생성자 tuple()
및에 의해 이해 dict()
되므로 인수의 압축을 풀 때 사용할 수 있습니다.