문제

진술이 헷갈리네요 " print(kw,":",키워드[kw])" 다음 프로그램에서 Python으로.

def cheeseshop(kind,*arguments,**keywords):
    print("--Do you have any",kind,"?")
    print("--I'm sorry, we're all out of",kind)
    for arg in arguments:
       print(arg)
    print("-"*40)
    print(keywords)
    keys=sorted(keywords)
    print(keys)
    for kw in keys:
        print(kw,":",keywords[kw])


cheeseshop("Limburger", "It's very runny, sir.",
           "It's really very, VERY runny, sir.",
           shopkeeper="Michael Palin",
           client="John Cleese",
           sketch="Cheese Shop Sketch")

결과는 아래와 같습니다.

--Do you have any Limburger ?
--I'm sorry, we're all out of Limburger
It's very runny, sir.
It's really very, VERY runny, sir.
----------------------------------------
{'client': 'John Cleese', 'sketch': 'Cheese Shop Sketch', 'shopkeeper': 'Michael Palin'}
['client', 'shopkeeper', 'sketch']
client : John Cleese
shopkeeper : Michael Palin
sketch : Cheese Shop Sketch

내 생각에는 "kw"는 '고객', '스케치', '가게 주인', 숫자가 아닌데 어떻게 "kw"가 명령문의 키워드 색인이 될 수 있습니까? " print(kw,":",키워드[kw])"?

내 아이디어를 확인하기 위해 다른 프로그램도 시도해 보았습니다.

letters=['a','b']
for kw in letters:
   print(letters[kw])

그리고 합리적인 답변이 나타납니다.

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
TypeError: list indices must be integers, not str

게다가 프로그램의 첫 번째 부분에서 발생한 문제로 인해 혼란스러워졌습니다. 제 생각에는 동일한 오류가 나에게 나타나야 할 것 같습니다.

도움이 되었습니까?

해결책

함수 인수 앞에 ** 함수를 호출할 때 명명된 매개변수를 취하는 "키워드 인수"라고 합니다. 예: client="John Cleese" 귀하의 예에서.이 경우 "client"는 이름이고 "John Cleese"는 값입니다.이 방법으로 전달된 인수는 dict, 이는 목록이 아닌 키-값 저장소로, 다음 형식에 익숙할 수 있습니다.

x = {
      "foo": "bar"
    } 
print x["foo"] # prints "bar"

다른 팁

키워드 유틸리티를 사용하면 키 이름이있는 배열의 일종입니다.

Python 문서에서 lib 설명을 볼 수 있습니다 여기 / P>

실제로 ** 키워드의 특별한 속성이 있습니다.

이를 사용하는 튜토리얼입니다 (및 그것을 이해하는 것도)과 여기를 여기에 는 stackoverflow 관련 질문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top