Python 함수 매개변수의 * 및 * 연산자

4405 단어 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 *와 ** 연산자 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보시기 바랍니다!

좋은 웹페이지 즐겨찾기