argument-unpacking - Python argparse example - ** (이중 별표 / 별표) 및 * (별표 / 별표)는 매개 변수에 대해 무엇을합니까?

Python argparse boolean / python / syntax / parameter-passing / variadic-functions

다음 메서드 정의에서 ***param2 에 대해 무엇을합니까?

def foo(param1, *param2):
def bar(param1, **param2):

ShadowRanger



Answer #1

먼저 위치 인수와 키워드 인수가 무엇인지 이해합시다. 다음은 위치 인수가있는 함수 정의의 예입니다 .

def test(a,b,c):
     print(a)
     print(b)
     print(c)

test(1,2,3)
#산출:
1
2
3

따라서 이것은 위치 인수가있는 함수 정의입니다. 키워드 / 명명 된 인수로도 호출 할 수 있습니다.

def test(a,b,c):
     print(a)
     print(b)
     print(c)

test(a=1,b=2,c=3)
#산출:
1
2
3

이제 키워드 인수 로 함수 정의의 예를 살펴 보겠습니다 .

def test(a=0,b=0,c=0):
     print(a)
     print(b)
     print(c)
     print('-------------------------')

test(a=1,b=2,c=3)
# 출력 :
1
2
3
-------------------------

위치 인수를 사용하여이 함수를 호출 할 수도 있습니다.

def test(a=0,b=0,c=0):
    print(a)
    print(b)
    print(c)
    print('-------------------------')

test(1,2,3)
# 출력 :
1
2
3
---------------------------------

예제로 바로 가서 논의 해 보겠습니다.

def sum(a,b):  #receive args from function calls as sum(1,2) or sum(a=1,b=2)
    print(a+b)

my_tuple = (1,2)
my_list = [1,2]
my_dict = {'a':1,'b':2}

# '*'연산자의 도움으로 목록 또는 튜플 또는 dict의 데이터 구조를 인수로 압축 해제하겠습니다.
sum(*my_tuple)   # becomes same as sum(1,2) after unpacking my_tuple with '*'
sum(*my_list)    # becomes same as sum(1,2) after unpacking my_list with  '*'
sum(**my_dict)   # becomes same as sum(a=1,b=2) after unpacking by '**' 

# 출력은 합계 함수에 대한 세 번의 호출 모두에서 3입니다.

이제 함수 정의 에서 사용하는 '*'연산자를 살펴 보겠습니다 . 예:

def sum(*args): # 수신 된 위치 인수를 튜플의 데이터 구조로 압축합니다. '*'적용 후-def sum ((1,2,3,4))
    sum = 0
    for a in args:
        sum+=a
    print(sum)

sum(1,2,3,4)  # 함수 합계로 전송 된 위치 인수
#산출:
10

이제 함수 정의에 사용 된 '**'의 예를 살펴 보겠습니다.

def sum(**args): # '**'적용 후 dict의 데이터 구조에 키워드 인수를 압축합니다-def sum ({a : 1, b : 2, c : 3, d : 4})
    sum=0
    for k,v in args.items():
        sum+=v
    print(sum)

sum(a=1,b=2,c=3,d=4) # 함수 합계로 전송 된 위치 인수