일반 인수 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)
함수 파라미터에 인수값을 할당하는 방법에는 두 가지가 있는데 둘 다 사용됩니다.
위치별positional 인수에는 키워드가 없으며 먼저 할당됩니다.
키워드별키워드 인수에는 키워드가 있으며 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
그리고.**kwargs
python: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
'source' 카테고리의 다른 글
다른 루트 디렉터리에 대해 xampp 웹 서버를 설정하는 방법 (0) | 2022.11.14 |
---|---|
Java regex에서 그룹을 바꿀 수 있습니까? (0) | 2022.11.14 |
존재하지 않는 경우 - Mariadb 구문 (0) | 2022.11.13 |
numpy reshape에서 -1은 무엇을 의미합니까? (0) | 2022.11.13 |
Talend가 열을 타임스탬프로 구문 분석할 수 없습니다. (0) | 2022.11.13 |