728x90
반응형
질문 : ** (이중 별표 / 별표) 및 * (별표 / 별표)는 매개 변수에 대해 무엇을합니까?
다음 메서드 정의에서 *
및 **
는 param2
무엇을합니까?
def foo(param1, *param2):
def bar(param1, **param2):
답변
*args
및 **kwargs
는 Python 문서의 함수 정의 에 대한 추가 섹션에 설명 된대로 함수에 임의의 수의 인수를 허용하는 일반적인 관용구입니다.
*args
는 모든 함수 매개 변수 를 튜플로 제공합니다 .
def foo(*args):
for a in args:
print(a)
foo(1)
# 1
foo(1,2,3)
# 1
# 2
# 3
**kwargs
는 형식 매개 변수에 해당하는 것을 제외한 모든 키워드 인수를 사전으로 제공합니다.
def bar(**kwargs):
for a in kwargs:
print(a, kwargs[a])
bar(name='one', age=27)
# name one
# age 27
두 관용구 모두 일반 인수와 혼합하여 고정 인수와 일부 가변 인수를 허용 할 수 있습니다.
def foo(kind, *args, **kwargs):
pass
다른 방법으로도 사용할 수 있습니다.
def foo(a, b, c):
print(a, b, c)
obj = {'b':10, 'c':'lee'}
foo(100,**obj)
# 100 10 lee
*l
관용구의 또 다른 사용법은 함수를 호출 할 때 인수 목록의 압축을 푸는 것입니다.
def foo(bar, lee):
print(bar, lee)
l = [1,2]
foo(*l)
# 1 2
Python 3에서는 할당의 왼쪽에 *l
을 사용할 수 있습니다 (Extended Iterable Unpacking ).이 컨텍스트에서는 튜플 대신 목록을 제공합니다.
first, *rest = [1,2,3,4]
first, *l, last = [1,2,3,4]
또한 Python 3은 새로운 의미 체계를 추가합니다 ( PEP 3102 참조).
def func(arg1, arg2, arg3, *, kwarg1, kwarg2):
pass
이러한 함수는 3 개의 위치 인수 만 허용하며 *
이후의 모든 것은 키워드 인수로만 전달할 수 있습니다.
참고
- 키워드 인수 전달에 의미 론적으로 사용되는 Python
dict
그러나 Python 3.6에서 키워드 인수는 삽입 순서를 기억하도록 보장됩니다. **kwargs
의 요소 순서는 이제 키워드 인수가 함수에 전달 된 순서와 일치합니다." -Python 3.6의 새로운 기능- 사실, CPython 3.6의 모든 딕셔너리는 삽입 순서를 구현 세부 사항으로 기억할 것입니다. 이것은 Python 3.7에서 표준이됩니다.
출처 : https://stackoverflow.com/questions/36901/what-does-double-star-asterisk-and-star-asterisk-do-for-parameters
728x90
반응형
'프로그래밍 언어 > Python' 카테고리의 다른 글
Python의 집합에 값을 추가 하는 방법 (0) | 2021.12.19 |
---|---|
Python 에서 PHP의 var_dump ()와 같은 기능 (0) | 2021.12.19 |
Python이 이 JSON 데이터를 구문 분석 할 수 없는 이유 (0) | 2021.12.16 |
Python 단위 테스트 파일의 위치 (0) | 2021.12.16 |
파이썬 requests을 사용하여 이미지를 다운로드하는 방법 (0) | 2021.12.16 |