2013-07-16 4 views
2

Я собираюсь через Python 2.7 учебник, и я смотрел на выходе следующего утверждения: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 
    keys = sorted(keywords.keys()) 
    for kw in keys: 
     print kw, ":", keywords[kw] 

Так что, если я называю эту программу как таковую:

cheeseshop("Cheddar", "No.", "Seriously?", 
     Shopkeeper="Michael Palin", 
     Client="John Cleese") 

Он выводит:

Do you have any Cheddar? 
I'm sorry, we're all out of Cheddar 
No. 
Seriously? 
-------------------------------------- 
Client: John Cleese 
Shopkeeper: Michael Palin 

Это правильно.

Если изменить это заявление печати на print keywords, я получаю следующее представление:

{'Shopkeeper': 'Ryan Lambert', 'Client': 'John Cleese'} 

Я немного запутался, как печать keywords[kw] просто возвращается с именем, и keywords не.

+0

Непонятно, что вы просите. Просьба уточнить. – alecxe

+3

Ключевые слова - словарь. Ключевые слова [kw] - это значение словаря ключевого слова, а kw - это ключ от этого словаря. Поэтому, когда вы «печатаете ключевые слова», вы получаете полное представление словаря, а не только имена. – dilbert

+0

Вы немного запутались в словарях на python? – njzk2

ответ

3

In Python, you can pass optional keyword parameters by putting a ** in front of the function parameter's list.

Так переменная keywords на самом деле тип словаря. Таким образом, если вы:

print keywords 

вы получите обратно (переформатирован, чтобы сделать отображение более очевидным)

{ 
    'Shopkeeper': 'Ryan Lambert', 
    'Client': 'John Cleese' 
} 

, который является словарем. И если вы делаете:

print keywords[kw] 

вы получите обратно значение словаря, связанного с ключом kw. Так что, если kw был 'Shopkeeper', то keywords[kw] становится 'Ryan Lambert', и если kw был 'Client', то keywords[kw] становится 'John Cleese'

+0

Ahhhh ... ладно. Это имеет смысл. Это та часть, которую мне не хватало. Спасибо. :) Извините, вопрос был немного искажен ... Я не был уверен, как его формулировать, не будучи чрезмерно многословным. – Ryan

+0

Нет проблем. Надеюсь, это прояснит! – jh314

1

ключевые слова хранятся в виде словаря. (См. this для получения дополнительной информации)

Если вы напечатаете сам словарь, он выведет полный набор пар, который он содержит (ключ, значение).

В программе:

  • ключи: «лавочник» и «Клиент»
  • значения соответственно: «Райан Ламберт» и «Джон Клиз»

Один из способов доступа значения должны «искать» для него своим ключом: dict [key]

Итак, когда вы написали: «keywords [kw]», вы на самом деле передаете ключ, и python даст вам соответствующее значение.

Вы можете думать, что похож, как доступ к значению массива:

a = ['a', 'b', 'c'] 

, если вы:

print a #output: ['a', 'b', 'c']  
print a[0] # outputs: 'a' 

только в отличие от массивов данные не хранятся «аккуратно» вместе в памяти, но с использованием хэширования

Надеется, что это помогло, Приветствию

+0

Perfect .. получил! Большое спасибо. – Ryan

+0

Нет проблем! Словари действительно полезны, но имейте в виду, когда их использовать и когда массивы лучше (производительность, размер и т. Д.), – fditz

1

при вызове функции с

cheeseshop("Cheddar", "No.", "Seriously?", 
      Shopkeeper="Michael Palin", Client="John Cleese") 

keywords параметр принимает значение {'Shopkeeper': 'Ryan Lambert', 'Client': 'John Cleese'}, то есть, это словарь.

Это эквивалентно (и гораздо проще, чем читать) вызов функции как

cheeseshop("Cheddar", *["No.", "Seriously?"], 
      **{"Shopkeeper":"Michael Palin", "Client":"John Cleese"}) 

То есть, значения в первом вызове функции автоматически обернут внутри параметров *arguments и **keywords - вот что те * и ** предназначены для.

Теперь, когда вы это делаете:

keys = sorted(keywords.keys()) 
for kw in keys: 
    print kw, ":", keywords[kw] 

keyword.keys() является ['Shopkeeper', 'Client'], то есть "ключи" в словаре. Затем вы сортируете эти ключи и для каждого ключа, вы печатаете соответствующую запись в словаре, например, «John Cleese» для «Client».

Смежные вопросы