[python] 일반 인수와 키워드 인수

“키워드 인수”는 일반 인수와 어떻게 다릅니 까? name=value위치 구문을 사용 하는 대신 모든 인수를 전달할 수 없습니까 ?



답변

키워드 인수 ” 라고하는 두 가지 관련 개념이 있습니다 .

다른 주석 작성자가 언급 한 호출 측에서는 일부 함수 인수를 이름으로 지정할 수 있습니다. 이름이없는 모든 인수 ( 위치 인수 ) 뒤에이를 언급 해야하며 기본값 이 있어야 합니다. 전혀 언급되지 않은 매개 변수에 대한 .

다른 개념은 함수 정의 측면에 있습니다. 이름별로 매개 변수를 사용하는 함수를 정의 할 수 있으며 해당 이름을 지정할 필요조차 없습니다. 이들은 순수한 키워드 인수 이며 위치 적으로 전달 될 수 없습니다. 문법은

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'}

이러한 기능은 거의 사용되지 않지만 때로는 매우 유용하기 때문에 위치 또는 키워드가 어떤 인수인지를 아는 것이 중요합니다.


답변

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

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. 위치 별. 위치 인수에는 키워드가 없으며 먼저 할당됩니다.

  2. 키워드로. 키워드 인수에는 키워드가 있으며 위치 인수 다음에 두 번째로 지정됩니다.

참고 것을 당신은 위치 인수를 사용하는 옵션이 있습니다.

경우 당신이 위치 인수를 사용하지 않는, 다음 – 예 – 모든 당신은 키워드 인수로 회전을 썼다.

당신이 함수를 호출하면 사용 위치 또는 키워드 또는 혼합물에 대한 결정을 내릴. 원하는 경우 모든 키워드를 수행하도록 선택할 수 있습니다. 우리 중 일부는이 선택을하지 않고 위치 주장을 사용합니다.


답변

아무도 형식 인수를 만족하는 키 인수 매개 변수의 사전을 전달할 수 있다고 지적한 사람이 아무도 없습니다.

>>> 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 을 사용하면 필수 및 비 필수 키워드 인수를 모두 가질 수 있습니다 .


선택 사항 : (param ‘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'`

이것은 같은 유형 인 경우 서로 옆에 많은 비슷한 인수가있는 경우에 도움이 될 수 있습니다.이 경우 명명 된 인수를 선호하거나 인수가 함께 속한 경우 사용자 정의 클래스를 만듭니다.