source

함수 파라미터에 아스타리스크가 표시됩니까?

ittop 2023. 4. 17. 22:26
반응형

함수 파라미터에 아스타리스크가 표시됩니까?

함수의 파라미터에 있는 아스타리스크는 무엇을 합니까?

피클 모듈을 보면 다음과 같습니다.

pickle.dump(obj, file, protocol=None, *, fix_imports=True)

(변수 파라미터의 경우) 앞에 있는1개의 아스타리스크와 2개의 아스타리스크는 알고 있습니다만, 이것보다 앞서는 것은 없습니다.그리고 나는 이것이 피클과는 아무 관련이 없다고 확신한다.그것은 아마도 이런 일이 일어나는 하나의 예에 불과할 것이다.통역사에게 이것을 보낼 때만 이름을 알게 되었습니다.

>>> def func(*):
...     pass
...
  File "<stdin>", line 1
SyntaxError: named arguments must follow bare *

문제가 된다면, 난 파이톤 3.3.0을 타고 있어.

벌거벗은*는 발신자가 이름 있는 인수를 사용하도록 강제하기 위해 사용됩니다.따라서 를 사용하여 함수를 정의할 수 없습니다.*다음 키워드 인수가 없는 경우 인수로 지정합니다.

자세한 내용은 이 답변 또는 Python 3 문서참조하십시오.

원래 답변은 질문에 완전히 답하지만, 관련 정보를 약간 추가할 뿐입니다.1개의 아스타리스크의 동작은 에서 유래합니다.관련 섹션을 인용합니다.

The second syntactical change is to allow the argument name to
be omitted for a varargs argument. The meaning of this is to
allow for keyword-only arguments for functions that would not
otherwise take a varargs argument:

    def compare(a, b, *, key=None):
        ...

간단한 영어로 키 값을 전달하려면 키 값을 명시적으로 전달해야 합니다.key="value".

def func(*, a, b):
    print(a)
    print(b)

func("gg") # TypeError: func() takes 0 positional arguments but 1 was given
func(a="gg") # TypeError: func() missing 1 required keyword-only argument: 'b'
func(a="aa", b="bb", c="cc") # TypeError: func() got an unexpected keyword argument 'c'
func(a="aa", b="bb", "cc") # SyntaxError: positional argument follows keyword argument
func(a="aa", b="bb") # aa, bb

**kwargs에서의 위의 예

def func(*, a, b, **kwargs):
    print(a)
    print(b)
    print(kwargs)

func(a="aa",b="bb", c="cc") # aa, bb, {'c': 'cc'}

의미론적으로는 그 뒤에 오는 인수가 키워드 전용임을 의미하기 때문에 이름을 지정하지 않고 인수를 지정하려고 하면 오류가 발생합니다.예를 들어 다음과 같습니다.

>>> def f(a, *, b):
...     return a + b
...
>>> f(1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f() takes 1 positional argument but 2 were given
>>> f(1, b=2)
3

실용적으로는 키워드 인수를 사용하여 함수를 호출해야 합니다.그것은 보통 논쟁의 이름이 주는 힌트가 없으면 논쟁의 목적을 이해하기 어려울 때 행해진다.

예를 들어 비교합니다. sorted(nums, reverse=True)vs. 당신이 쓴다면sorted(nums, True)후자의 경우 가독성이 훨씬 떨어지기 때문에 Python 개발자들은 사용자가 전자의 방법으로 쓰도록 선택했습니다.

함수가 있다고 가정합니다.

def sum(a,key=5):
    return a + key 

이 함수는 다음 두 가지 방법으로 호출할 수 있습니다.

sum(1,2)또는sum(1,key=2)

함수를 원한다고 가정합니다.sum키워드 인수만을 사용하여 호출됩니다.

추가하다*함수 파라미터 목록으로 이동하여 위치 인수의 끝을 표시합니다.

따라서 함수는 다음과 같이 정의됩니다.

def sum(a,*,key=5):
    return a + key 

를 통해서만 호출할 수 있습니다.sum(1,key=2)

다음 링크가 설명에 매우 도움이 된다는 것을 알게 되었습니다.*,*args그리고.**kwargs:

https://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/

기본적으로 위의 답변 외에 위의 사이트에서 학습했습니다(credit: https://pythontips.com/author/yasoob008/) 다음 내용:

되어 있는 에는 두 예가 . 는 '예'로 되어 있습니다. 을 사용하다*args 하나와 하나가 있다.**kwargs

def test_args_kwargs(arg1, arg2, arg3):
    print "arg1:", arg1
    print "arg2:", arg2
    print "arg3:", arg3

# first with *args
>>> args = ("two", 3,5)
>>> test_args_kwargs(*args)
arg1: two
arg2: 3
arg3: 5

# now with **kwargs:
>>> kwargs = {"arg3": 3, "arg2": "two","arg1":5}
>>> test_args_kwargs(**kwargs)
arg1: 5
arg2: two
arg3: 3

★★★★★★★★★★★★★★★★★.*args 인수가 을 동적으로 작성할 수 있습니다. 「」는 「」의 순서로 .**kwargs는 NAMED 인수의 전달을 name으로 할 수 있으며 이에 따라 NAME으로 처리할 수 있습니다(이 인수가 공급되는 순서에 관계없이).

인수의 올바른 순서는 다음과 같아야 한다는 점에 주의해 주세요.

some_func(fargs,*args,**kwargs)

언급URL : https://stackoverflow.com/questions/14301967/bare-asterisk-in-function-parameters

반응형