<질문>
"키워드 인수"는 일반 인수와 어떻게 다릅니까? 모든 인수를 다음과 같이 전달할 수는 없습니다.name=value
위치 구문을 사용하는 대신?
<답변1>
"라는 두 가지 관련 개념이 있습니다.키워드 인수".
다른 주석가들이 언급한 호출 측에서는 이름으로 일부 함수 인수를 지정할 수 있습니다. 이름이 없는 모든 인수 뒤에 언급해야 합니다(위치 인수), 그리고 있어야 합니다기본값 전혀 언급되지 않은 모든 매개변수에 대해.
다른 개념은 함수 정의 측면에 있습니다. 이름으로 매개변수를 사용하는 함수를 정의할 수 있으며 해당 이름이 무엇인지 지정할 필요도 없습니다. 이것들은 순수하다키워드 인수, 위치적으로 전달할 수 없습니다. 구문은
def my_function(arg1, arg2, **kwargs)
어느키워드 인수 이 함수에 전달하면 이라는 사전에 배치됩니다.kwargs
. 다음과 같이 런타임에 이 사전의 키를 검사할 수 있습니다.
def my_function(**kwargs):
print str(kwargs)
my_function(a=12, b="abc")
{'a': 12, 'b': 'abc'}
<답변2>
구별이 중요한 마지막 언어 기능이 있습니다. 다음 기능을 고려하십시오.
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'}
이러한 기능은 거의 사용되지 않지만 때때로 매우 유용하며 어떤 인수가 위치 또는 키워드인지 아는 것이 중요합니다.
<답변3>
키워드 인수를 사용하는 것은 순서가 중요하지 않다는 점을 제외하고 일반 인수와 동일합니다. 예를 들어 아래의 두 함수 호출은 동일합니다.
def foo(bar, baz):
pass
foo(1, 2)
foo(baz=2, bar=1)
<답변4>
그들 앞에 키워드가 없습니다. 순서가 중요합니다!
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)
<답변5>
함수 매개변수에 인수 값을 할당하는 두 가지 방법이 있으며 둘 다 사용됩니다.
위치별. 위치 인수에는 키워드가 없으며 먼저 할당됩니다.
키워드별. 키워드 인수에는 키워드가 있으며 위치 인수 다음으로 두 번째로 할당됩니다.
참고당신 위치 인수를 사용할 수 있는 옵션이 있습니다.
만약에당신 위치 인수를 사용하지 마십시오. 그렇다면 -- 예 -- 모든 것당신 write는 키워드 인수로 판명되었습니다.
언제당신 위치, 키워드 또는 혼합을 사용하기로 결정한 함수를 호출합니다. 원하는 경우 모든 키워드를 수행하도록 선택할 수 있습니다. 우리 중 일부는 이러한 선택을 하지 않고 위치 인수를 사용합니다.
<답변6>
나는 아무도 이렇게 형식 매개변수를 만족하는 키가 있는 인수 매개변수의 사전을 전달할 수 있다는 점을 지적하지 않은 것 같다는 사실에 놀랐습니다.
>>> 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
>>>
<답변7>
사용파이썬 3 당신은 가질 수 있습니다둘 다 필수 및 비필수 키워드arguments:
선택사항: (매개변수 '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'`
이것은 특히 같은 유형인 경우 서로 옆에 유사한 인수가 많이 있는 경우에 도움이 될 수 있습니다. 이 경우 명명된 인수를 사용하는 것을 선호하거나 인수가 함께 속하는 경우 사용자 지정 클래스를 만듭니다.
<답변8>
나는 아무도 위치 인수와 키워드 인수를 혼합하여 다음을 사용하여 이와 같은 교활한 일을 할 수 있다는 사실을 언급하지 않았다는 사실에 놀랐습니다.*args
그리고**kwargs
(from this site):
def test_var_kwargs(farg, **kwargs):
print "formal arg:", farg
for key in kwargs:
print "another keyword arg: %s: %s" % (key, kwargs[key])
이렇게 하면 미리 정의하고 싶지 않은 키가 있는 임의의 키워드 인수를 사용할 수 있습니다.
<답변9>
유형 주석을 사용하여 기본 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 {}
<답변10>
정의하는 방법을 보완/추가하십시오.키워드에 할당되지 않은 인수의 기본값 함수를 호출할 때:
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
'개발 > Python' 카테고리의 다른 글
[파이썬] yaml 패키지는 어떻게 설치합니까? (0) | 2022.10.22 |
---|---|
[파이썬] 딕셔너리에 키워드 매개 변수로 함수 전달 (0) | 2022.10.22 |
[파이썬] raise 키워드를 사용하는 방법 (0) | 2022.10.13 |
[파이썬] Openpyxl 행열 배경색 변경 Attribute 오류 (1) | 2022.10.13 |