source

일반 인수 vs. 키워드 인수

manysource 2022. 11. 13. 19:34

일반 인수 vs. 키워드 인수

인수는 다릅니까키워드 인수"는 일반 인수와 어떻게 다릅니까?가 다 될 name=value치치구 문용 ?용 ???

두 가지 관련 개념이 있는데, 둘 다 "키워드 인수"라고 불립니다.

발신측에서는, 다른 코멘트가 언급하고 있는 것과 같이, 몇개의 함수 인수를 이름으로 지정할 수 있습니다.이름(positional 인수)이 없는 모든 인수 뒤에 이러한 인수를 언급해야 합니다.또한 전혀 언급되지 않은 파라미터에는 디폴트값이 있어야 합니다.

또 다른 개념은 함수 정의 측면에 있습니다.이름별로 파라미터를 취득하는 함수를 정의할 수 있습니다.이러한 이름을 지정할 필요도 없습니다.이것들은 순수한 키워드 인수로, 위치적으로 전달할 수 없습니다.구문은 다음과 같습니다.

def my_function(arg1, arg2, **kwargs)

이 함수에 전달되는 키워드 인수는 다음 이름의 사전에 배치됩니다.kwargs과 같이 이 할 수 런타임에 다음과 같이 이 사전의 키를 검사할 수 있습니다.

def my_function(**kwargs):
    print str(kwargs)

my_function(a=12, b="abc")

{'a': 12, 'b': 'abc'}

이 구별이 중요한 마지막 언어 특징이 있습니다.다음 기능을 고려합니다.

def foo(*positional, **keywords):
    print "Positional:", positional
    print "Keywords:", keywords

*positional에는 인수로 된 모든 됩니다.foo()을 사용하다

>>> foo('one', 'two', 'three')
Positional: ('one', 'two', 'three')
Keywords: {}

**keywords인수에는 다음과 같은 키워드 인수가 저장됩니다.

>>> foo(a='one', b='two', c='three')
Positional: ()
Keywords: {'a': 'one', 'c': 'three', 'b': 'two'}

물론 다음 두 가지를 동시에 사용할 수 있습니다.

>>> foo('one','two',c='three',d='four')
Positional: ('one', 'two')
Keywords: {'c': 'three', 'd': 'four'}

이러한 기능은 거의 사용되지 않지만 매우 유용할 수 있습니다.어떤 인수가 위치인지 키워드인지 알아두는 것이 중요합니다.

키워드 인수를 사용하는 것은 순서가 중요하지 않다는 점을 제외하고 일반 인수와 동일합니다.예를 들어, 다음 2개의 함수 호출이 동일합니다.

def foo(bar, baz):
    pass

foo(1, 2)
foo(baz=2, bar=1)

위치 인수

앞에 키워드가 없어요.순서가 중요해요!

func(1,2,3, "foo")

키워드 인수

앞에 키워드가 있어요.그들은 어떤 순서든 할 수 있어요!

func(foo="bar", baz=5, hello=123)

func(baz=5, foo="bar", hello=123)

또한 기본 인수를 사용하고 키워드 삽입을 게을리하면 순서가 중요해집니다.

def func(foo=1, baz=2, hello=3): ...
func("bar", 5, 123)

함수 파라미터에 인수값을 할당하는 방법에는 두 가지가 있는데 둘 다 사용됩니다.

  1. 위치별positional 인수에는 키워드가 없으며 먼저 할당됩니다.

  2. 키워드별키워드 인수에는 키워드가 있으며 positional 인수 뒤에 두 번째로 할당됩니다.

위치 인수를 사용할 수 있는 옵션이 있습니다.

위치변수를 사용하지 않으면 -- 네 -- 당신이 쓴 모든 것이 키워드 인수로 판명됩니다.

함수를 호출할 위치, 키워드 또는 혼합을 사용할지 결정합니다.필요한 경우 모든 키워드를 수행하도록 선택할 수 있습니다.우리들 중 몇몇은 이 선택을 하지 않고 위치적인 주장을 사용한다.

아무도 이렇게 공식적인 매개 변수를 만족시키는 키 있는 매개 변수 사전을 통과시킬 수 있다고 지적하지 않은 것 같아 놀랍습니다.

>>> def func(a='a', b='b', c='c', **kwargs):
...    print 'a:%s, b:%s, c:%s' % (a, b, c)
... 
>>> func()
a:a, b:b, c:c
>>> func(**{'a' : 'z', 'b':'q', 'c':'v'})
a:z, b:q, c:v
>>> 

Python 3을 사용하면 필수 및 비필수 키워드 인수를 모두 사용할 수 있습니다.


옵션: (파라미터 'b'에 대해 정의된 기본값)

def func1(a, *, b=42):
    ...
func1(value_for_a) # b is optional and will default to 42

필수(파라미터 'b'에 대해 정의된 기본값 없음):

def func2(a, *, b):
    ... 
func2(value_for_a, b=21) # b is set to 21 by the function call
func2(value_for_a) # ERROR: missing 1 required keyword-only argument: 'b'`

이것은, 특히 같은 타입의 인수가 많은 경우에 도움이 됩니다.이 경우, 이름이 붙은 인수를 사용하는 것을 선호합니다.인수가 함께 속해 있으면 커스텀클래스를 만듭니다.

아무도 이런 교활한 일을 하기 위해 위치 인수와 키워드 인수를 섞을 수 있다는 사실을 언급하지 않은 것이 놀랍다.*args그리고.**kwargs(이 사이트에서):

def test_var_kwargs(farg, **kwargs):
    print "formal arg:", farg
    for key in kwargs:
        print "another keyword arg: %s: %s" % (key, kwargs[key])

이를 통해 사전에 정의하지 않을 키가 있는 임의의 키워드 인수를 사용할 수 있습니다.

유형 주석을 사용하여 기본 kwargs가 있는 예를 찾고 있었습니다.

def test_var_kwarg(a: str, b: str='B', c: str='', **kwargs) -> str:
     return ' '.join([a, b, c, str(kwargs)])

예:

>>> print(test_var_kwarg('A', c='okay'))
A B okay {}
>>> d = {'f': 'F', 'g': 'G'}
>>> print(test_var_kwarg('a', c='c', b='b', **d))
a b c {'f': 'F', 'g': 'G'}
>>> print(test_var_kwarg('a', 'b', 'c'))
a b c {}

함수를 호출할 때 키워드 내에서 할당되지 않은 인수의 기본값을 정의하는 방법만 보충/추가하면 됩니다.

def func(**keywargs):
if 'my_word' not in keywargs:
    word = 'default_msg'
else:
    word = keywargs['my_word']
return word

호출자:

print(func())
print(func(my_word='love'))

다음과 같은 이점을 얻을 수 있습니다.

default_msg
love

에 대해 자세히 읽다*args그리고.**kwargspython:https://www.digitalocean.com/community/tutorials/how-to-use-args-and-kwargs-in-python-3

언급URL : https://stackoverflow.com/questions/1419046/normal-arguments-vs-keyword-arguments