"키워드 인수"는 일반 인수와 어떻게 다릅니 까? name=value
위치 구문을 사용 하는 대신 모든 인수를 전달할 수 없습니까 ?
"키워드 인수"는 일반 인수와 어떻게 다릅니 까? 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'}
kwargs
이거나 sth로 이름을 바꿀 수 있습니까? options
( def my_fuction(arg1, arg2, **options)
) 처럼 ?
kwargs
협약이 더 적절한 이름이 없을 때
구별이 중요한 하나의 마지막 언어 기능이 있습니다. 다음 기능을 고려하십시오.
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'}
이러한 기능은 거의 사용되지 않지만 때로는 매우 유용하기 때문에 위치 또는 키워드가 어떤 인수인지를 아는 것이 중요합니다.
*positional
과 **keywords
같이 함수 정의를 변경하면 전달 될 수 있습니다 def foo(arg1, *positional, **keywords):
. 여기 arg1
에 위치가 필요합니다. 위치 응답은 선택적이고 가변적 인 수의 위치 인수를 의미합니다.
foo(bar=True)
다음을 사용하여 값을 얻을 수 bar = keywords.pop('bar')
와 동일합니다 bar = keywords.pop('bar', None)
. 기본값으로bar = keywords.pop('bar', False)
키워드 인수를 사용하는 것은 순서가 중요하지 않다는 점을 제외하고 일반 인수와 동일합니다. 예를 들어 아래의 두 함수 호출은 동일합니다.
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)
func("bar", 5)
? 그런 다음 hello
기본값 을 가져옵니다 3
.
함수 매개 변수에 인수 값을 지정하는 두 가지 방법이 있으며 둘 다 사용됩니다.
위치 별. 위치 인수에는 키워드가 없으며 먼저 할당됩니다.
키워드로. 키워드 인수에는 키워드가 있으며 위치 인수 다음에 두 번째로 지정됩니다.
참고 것을 당신은 위치 인수를 사용하는 옵션이 있습니다.
경우 당신이 위치 인수를 사용하지 않는, 다음 - 예 - 모든 당신은 키워드 인수로 회전을 썼다.
때 당신이 함수를 호출하면 사용 위치 또는 키워드 또는 혼합물에 대한 결정을 내릴. 원하는 경우 모든 키워드를 수행하도록 선택할 수 있습니다. 우리 중 일부는이 선택을하지 않고 위치 주장을 사용합니다.
아무도 형식 인수를 만족하는 키 인수 매개 변수의 사전을 전달할 수 있다고 지적한 사람이 아무도 없습니다.
>>> 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
>>>
, **kwargs
합니다. 그것은 고정 된 수의 매개 변수를 가진 간단한 func def조차도 사전을 제공 할 수 있음을 보여줍니다. 즉, 정의에서 멋진 것을 요구하지 않습니다. 그런 다음 WITH ** kwargs 정의에 두 번째 예를 추가하고이를 통해 사전의 EXTRA 항목을 사용하는 방법을 보여줄 수 있습니다.
print 'a:%s, b:%s, c:%s' % (a, b, c)
구문 오류가 발생하지만 print('a:%s, b:%s, c:%s' % (a, b, c))
작동합니다. 파이썬 버전으로 뭔가? 어쨌든이 통찰력에 감사드립니다. 지금까지 나는 더 print('a:{}, b:{}, c:{}'.format(a, b, c))
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'`
이것은 같은 유형 인 경우 서로 옆에 많은 비슷한 인수가있는 경우에 도움이 될 수 있습니다.이 경우 명명 된 인수를 선호하거나 인수가 함께 속한 경우 사용자 정의 클래스를 만듭니다.
유형 주석을 사용하여 기본 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
및 **kwargs
파이썬에서 : https://www.digitalocean.com/community/tutorials/how-to-use-args-and-kwargs-in-python-3