Python 함수 매개변수의 * 및 * 연산자
문제 설명
일부 코드를 읽을 때 함수 정의/호출할 때의 매개 변수 앞에 * 또는 * 연산자가 있는 것을 자주 볼 수 있습니다. 비교적 헷갈려서 오늘 기록을 탐구하러 왔습니다.
함수 정의 시 * 및 * *
관련 자료를 보면 매개 변수 앞에 *번호를 붙이는 것은 매개 변수의 개수가 한 개가 아니라는 것을 의미하고, 별표(*) 매개 변수를 가진 함수가 전송된 매개 변수는 하나의 원조(tuple)로 저장되며, 두 개의 (*) 번호가 있으면 사전(dict)을 나타낸다는 것을 알 수 있다.
우리는 3개의 함수를 정의하여 각각 *와 **의 기능을 테스트합니다.
첫 번째 함수func1 매개 변수 목록에는 두 개의 매개 변수가 있습니다. 그 중에서 매개 변수 b 앞에는 *
두 번째 함수func2 매개 변수 목록에는 두 개의 매개 변수가 있습니다. 그 중에서 매개 변수 b 앞에는 **가 있습니다
세 번째 함수func3 매개 변수 목록에는 세 개의 매개 변수가 있습니다. 두 번째 매개 변수 앞에는 *, 세 번째 매개 변수 앞에는 **가 있습니다.
def func1(a, *b):
print(a)
print(b)
def func2(a, **b):
print(a)
print(b)
def func3(a, *b, **c):
print(a)
print(b)
print(c)
그리고 매개 변수 전송을 하겠습니다.
func1(1, 2, 3, 4)
print("---"*24)
func2(1, x=1, y=2)
print("---"*24)
func3(1, 2, 3, 4, x=5, y=6)
인쇄 결과:$python3 main.py
(2, 3, 4)
------------------------------------------------------------------------
일
{'x': 1, 'y': 2}
------------------------------------------------------------------------
일
(2, 3, 4)
{'x': 5, 'y': 6}
이를 통해 알 수 있듯이 첫 번째 함수는 나머지 1개의 후속 매개 변수를 모두 모듈 형식으로 * 매개 변수 b에 부여하고, 두 번째 함수는 추가 매개 변수를 사전 형식으로 * 매개 변수 b에 부여하며, * 과 * 가 동시에 존재할 때, 별표 (*) 매개 변수의 함수가 전송된 참수는 하나의 모듈 (tuple) 로 저장하고, 두 개의 (*) 번호는 사전 (dict) 을 나타낸다.
만약 여기에서 우리가 값 부여 형식으로 매개 변수를 불러와func2를 호출하지 않는다면, 프로그램은 오류를 보고할 것이다. 예를 들어
func2(1, 2, 3, 4)
print("---"*24)
다음과 같은 오류 메시지가 표시됩니다.Traceback (most recent call last):
File "main.py", line 18, in
func2(1, 2, 3, 4)
TypeError: func2() takes 1 positional argument but 4 were given
* 및 * 호출 시 역할
호출할 때 *는 주로 압축 해제 매개 변수 목록에 사용되며, set,tuple,list,dict (values의 값을 가져옴) 형식의 데이터에 적용됩니다.실험 코드는 다음과 같습니다.
def func4(a, b):
print(a)
print(b)
params_set = (1, 2)
params_tuple = (1, 2)
params_list = [1, 2]
params_dict = {
"a": 1,
"b": 2
}
우리는 * 매개 변수를 사용하여 각각 호출한다
print("***"*24)
func4(*params_set)
print("***"*24)
func4(*params_tuple)
print("***"*24)
func4(*params_list)
print("***"*24)
func4(*params_dict)
print("***"*24)
인쇄 결과는 다음과 같습니다.************************************************************************
일
이
************************************************************************
일
이
************************************************************************
일
이
************************************************************************
a
b
************************************************************************
보실 수 있습니다. * 매개 변수를 순서대로 일일이 값을 부여합니다. (set은 순서가 없기 때문에 맹목적으로 추측한 결과는 무작위이고 실험적으로 검증되지 않았습니다.) 그리고dict 형식은 사전의 keys를 함수 매개 변수로 부여합니다.
** 매개변수 방식은 입력이 dict여야 하며 변수 이름은 함수에 정의된 변수 이름과 일치해야 합니다. 실험 코드는 다음과 같습니다.
params_dict1 = {
"a": 1,
"b": 2
}
params_dict2 = {
"x": 1,
"y": 2
}
print("---"*24)
func4(**params_dict1)
print("---"*24)
func4(**params_dict2)
인쇄 결과는 다음과 같습니다.------------------------------------------------------------------------
일
이
------------------------------------------------------------------------
Traceback (most recent call last):
File "main.py", line 57, in
func4(**params_dict2)
TypeError: func4() got an unexpected keyword argument 'x'
변수 이름이 함수에 정의된 변수 이름과 일치하지 않을 때 프로그램이 오류를 보고하는 것을 볼 수 있습니다
참고
Python 함수의 매개변수 전면 테이프 * 및 **는 무엇입니까?
Execute Python-3 Online (Python v3.6.2),
Python 함수 매개 변수에 있는 *와 ** 연산자에 대한 이 글은 여기에 소개되었습니다. 더 많은 Python *와 ** 연산자 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보시기 바랍니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.