programing

함수 호출에서 **(이중 별/별표) 및 *(별/별표)는 무엇을 의미합니까?

bestprogram 2023. 4. 12. 23:06

함수 호출에서 **(이중 별/별표) 및 *(별/별표)는 무엇을 의미합니까?

like음음음 in in in in in in와 같은 zip(*x) ★★★★★★★★★★★★★★★★★」f(**k)의, 의 기능* ★★★★★★★★★★★★★★★★★」**각을을의?의 미??Python은 이러한 동작을 어떻게 구현하며 성능에는 어떤 영향이 있습니까?


다음 항목도 참조하십시오.튜플을 인수로 확장합니다.OP에서 사용해야 하는 질문을 끝내려면 이 페이지를 사용하십시오.*그게 존재하는지 모르기 때문입니다.

파라미터는 **(이중/별 디스크) *(별/별 디스크)의 기능을 참조하십시오.매개변수에 대한 보충 질문을 위해 사용합니다.

★★★★*시퀀스 또는 컬렉션을 위치 인수로 압축 해제합니다.「」가 .

def add(a, b):
    return a + b

values = (1, 2)

「 」의 *unpacking, unpacking, unpacking, unpacking ada 라고 쓸 수 .s = add(*values) 쓰면 s = add(1, 2).

★★★**를 하여 인수 합니다.즉, 인수는 다음과 같습니다.

values = { 'a': 1, 'b': 2 }
s = add(**values) # equivalent to add(a=1, b=2)

양쪽 연산자를 같은 함수 호출에 사용할 수 있습니다.예를 들어 다음과 같습니다.

def sum(a, b, c, d):
    return a + b + c + d

values1 = (1, 2)
values2 = { 'c': 10, 'd': 15 }

s = add(*values1, **values2) s = sum(1, 2, c=10, d=15).

Python 설명서에서 튜토리얼의 관련 섹션을 참조하십시오.


similarly유 similarly,, similarly 、* ★★★★★★★★★★★★★★★★★」**파라미터에 사용할 수 있습니다.「」를 사용합니다.*는 임의의 인수를 수 인수는 파라미터로 됩니다.예를 들어, 「」는 「Positional 인수입니다.」는 「Positional 인수입니다.이 인수는 단일 파라미터로 수집됩니다.

def add(*values):
    s = 0
    for v in values:
        s = s + v
    return s

처럼 됩니다.s = add(1, 2, 3, 4, 5),values(1, 2, 3, 4, 5)그 (그 결과)가 생깁니다만,15를 참조해 주세요.

는 '이러다', '이러다', '이러다', '이러다', '이러다', '이러다', '이러다', '이러다', '이러다', '이러다'로 표시되어 있습니다.**을 받다dict:

def get_a(**values):
    return values['a']

s = get_a(a=1, b=2)      # returns 1

이를 통해 다수의 옵션파라미터를 선언할 필요 없이 지정할 수 있습니다.

이 두 가지를 조합할 수 있습니다.

def add(*values, **options):
    s = 0
    for i in values:
        s = s + i
    if "neg" in options:
        if options["neg"]:
            s = -s
    return s
        
s = add(1, 2, 3, 4, 5)            # returns 15
s = add(1, 2, 3, 4, 5, neg=True)  # returns -15
s = add(1, 2, 3, 4, 5, neg=False) # returns 15

에서는, 의 별이 인수로 를 들면, 「」).zip(*x) is is is is is와 zip(x1, x2, x3) givenx=[x1,x2,x3] 인수 "Discription")로f(**k) is is is is is와 f(x=my_x, y=my_y) givenk = {'x':my_x, 'y':my_y}.

이치노를 들어, 예를 들면, 「CHANGE:」는, 「CHANGE:」라고 하는, 「CHANGE: EGE: CHANGEGE: EGE:def foo(*x)는 "의 수의 하며, "foo"를 통해 해당 수 x가 콜한 )foo(1,2,3),x 되다(1, 2, 3)및 )" »def bar(**k) " 키워드 하며, 이러한 인수에는 "bar", "bar" 또는 "bar"를 통해 접근할 수 .k(즉, 사용자가 전화했을 경우)bar(x=42, y=23),k될 것이다{'x': 42, 'y': 23})".

함수 호출의 인수를 저장할 때 특히 유용합니다.

예를 들어, 함수 '추가'에 대한 몇 가지 단위 테스트가 있다고 가정합니다.

def add(a, b):
    return a + b

tests = { (1,4):5, (0, 0):0, (-1, 3):3 }

for test, result in tests.items():
    print('test: adding', test, '==', result, '---', add(*test) == result)

콜 추가를 호출하는 방법은 다음과 같은 작업을 수동으로 수행하는 것 외에add(test[0], test[1])못생겼죠.또한 변수의 수가 다양할 경우 필요한 모든 if 문장으로 인해 코드가 상당히 악화될 수 있습니다.

공장 객체(개체를 작성하는 객체)를 정의하는 데도 유용합니다.예를 들어, 자동차 객체를 만들어 반환하는 Factory 클래스가 있다고 가정합니다.당신이 할 수 있는 건myFactory.make_car('red', 'bmw', '335ix')작성하다Car('red', 'bmw', '335ix')그러면 이 반환됩니다.

def make_car(*args):
    return Car(*args)

이 기능은 슈퍼클래스의 컨스트럭터를 호출하는 경우에도 편리합니다.

이것은 확장 콜 구문이라고 불립니다.매뉴얼에서 다음 항목을 참조하십시오.

함수 호출에 *expression 구문이 표시되는 경우 식을 시퀀스로 평가해야 합니다.이 시퀀스로부터의 요소는 추가 위치 인수인 것처럼 취급됩니다.위치 인수 x1, …, xN이 존재하며 식이 시퀀스 y1, …, yM으로 평가되는 경우 이는 M+N 위치 인수 x1, …, xN, y1, …, YM을 가진 콜과 동일합니다.

또, 다음과 같이 합니다.

함수 호출에 **expression 구문이 표시되는 경우 표현은 매핑에 대해 평가해야 합니다.매핑의 내용은 추가 키워드 인수로 취급됩니다.expression 및 explicit 키워드 인수로 키워드가 표시되는 경우 TypeError 예외가 발생합니다.

언급URL : https://stackoverflow.com/questions/2921847/what-do-double-star-asterisk-and-star-asterisk-mean-in-a-function-call