2013-08-29 1 views
0

나는 프로그래밍 파이썬를 읽고 오전 알아낼 수 없습니다 무엇 ** D 다음과 같은 코드의 의미 :** D는 string.format (** D)에서 무엇을 의미합니까?

>>> D = {'say': 5, 'get': 'shrubbery'} 
>>> '%(say)s => %(get)s' % D 
'5 => shrubbery' 
>>> '{say} => {get}'.format(**D) 
'5 => shrubbery' 

내가 봤 ** 대부분의 결과에 대해 얘기하고 파이썬에서 kwargs로이 기능을 취할 수 있도록 임의의 수의 키워드 인수.

여기서 string.format (** D)는 사전 형식 변수 D가 하나의 인수 일 뿐이므로 function이 임의의 수의 키워드 인수를 갖도록하는 것처럼 보이지 않습니다. 하지만 여기서 무엇을 의미합니까?

+3

본 적이 있습니까? http://stackoverflow.com/questions/3394835/args-and-kwargs? –

+0

예, 저는 그 질문을 보았습니다. 그러나 저는 거기에 연결할 수 없었습니다. ** kwargs는 함수 def에 나타납니다. 함수 나 메서드를 호출 할 때가 아닙니다. – wokbot

+0

나는 알렉스 Martelli에 의해 주어진 http://stackoverflow.com/q/1415812/2719588 질문에 대한 답을 간과했다. 그는 "전화에서 ** kw 사용에 관해서"매우 좋은 점을 만들었습니다. ... _ – wokbot

답변

2

짧은 대답, 나는 누군가가 나중에 논문을 제안 할 것이라고 확신한다.

**D 여기서 사전 D은 "명명 된 구멍"을 문자열 형식으로 채우는 것을 의미합니다. 보시다시피, {say}5으로 바뀌었고 {get}shrubbery으로 바뀌 었습니다.

사실은 함수에 임의의 수의 매개 변수를 전달하는 데 사용되는 것과 동일한 메커니즘입니다. format은 문자열의 "구멍"만큼의 매개 변수를 예상합니다. 당신이 그들을 사전에 싸고 싶다면, 그렇게하는 것입니다.

자세한 내용은 Prashant가 제안한대로 Python 설명서에서 keyword argumentsunpacking을 확인하십시오.

+0

3 가지 답변을 합치면 그것이 무엇인지 분명히 알 수있었습니다. 충분한 설명과 답변을 쉽게 이해해 주셔서 감사합니다! – wokbot

2

** D는 인수 압축 해제에 사용됩니다. 이 키워드 할당의 순서로 사전을 확장, 그래서 이 가

'{말} =이> {얻을}'. 형식 (** D)을

이된다

' {말} => '{얻을}. 형식 (5 = 말 얻을 = 관목) 키워드 인수가 사전이기 때문에

는 ** kwargs로 트릭은 작동합니다.

관련 문제