Programing

함수 인수의 별표만 표시하시겠습니까?

c10106 2022. 3. 11. 22:06
반응형

함수 인수의 별표만 표시하시겠습니까?

함수의 변수에 있는 맨 별표는 무엇을 하는가?

피클 모듈을 살펴보니 다음과 같다.

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

하나의 선행 인수(변수 인수)와 두 개의 선행 인수(변수 인수)에 대해 알고 있지만, 이것은 아무 것도 선행하지 않는다.그리고 나는 이것이 피클과 아무 관련이 없다고 확신한다.그것은 아마 이런 일이 일어난 하나의 예일 것이다.나는 통역사에게 이것을 보낼 때 비로소 그 이름을 알게 되었다.

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

그게 중요한 거라면 난 지금 파이톤 3.3.0을 하고 있어.

벌거벗다*호출자가 명명된 인수를 사용하도록 강제하는 데 사용되므로 다음 명령어를 정의할 수 없음*다음 키워드 인수가 없을 때 인수로 사용하십시오.

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

원래 답은 질문에 완전히 답하는 반면, 관련 정보를 약간 추가하기만 하면 된다.단일 별표에 대한 동작은 다음과 같다. 관련 섹션을 인용한다.

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)후자는 훨씬 덜 읽기 쉬울 것이다. 그래서 파이썬 개발자들은 당신이 그것을 전자의 방법으로 쓰도록 만들기로 선택했다.

함수가 있다고 가정해 보십시오.

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/

본질적으로, 위의 대답 외에도, 나는 위의 사이트에서 배웠다(신용: 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당신이 그들이 공급되는 순서대로 취해질 논쟁의 목록을 동적으로 만들 수 있는 반면,**kwargsNAMED 인수의 전달을 가능하게 할 수 있으며, 그에 따라 NAME에 의해 처리될 수 있다(이 인수의 공급 순서에 관계 없이).

이 사이트는 다음과 같은 논거의 올바른 순서가 되어야 한다는 점에 주목하면서 계속된다.

some_func(fargs,*args,**kwargs)

참조URL: https://stackoverflow.com/questions/14301967/bare-asterisk-in-function-arguments

반응형