Индексирование аргументов ключевого слова с помощью строки в Python

StackOverflow https://stackoverflow.com//questions/24056599

  •  26-12-2019
  •  | 
  •  

Вопрос

Меня смущает это утверждение " печать(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" может быть индексом ключевых слов в операторе " печать(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" в вашем примере.В этом случае "клиент" - это имя, а "Джон Клиз" - значение.Аргументы, переданные таким образом, помещаются в dict, который представляет собой хранилище ключей-значений, а не список, с которым вы, возможно, знакомы по форме

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

Другие советы

В нем используются утилиты keywords, это своего рода массив с именем ключа.

Вы можете ознакомиться с описанием библиотеки в документации python ЗДЕСЬ

На самом деле есть специальные свойства аргументов **keywords, которые предоставляют право на это.

ЗДЕСЬ это учебное пособие по его использованию (а также по его пониманию) и ЗДЕСЬ это вопрос, связанный со stackoverflow.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top