我正在阅读Python 2.7教程,我正在查看以下语句的输出:
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语句更改为print keywords
,我会得到以下表示:
{'Shopkeeper': 'Ryan Lambert', 'Client': 'John Cleese'}
我对打印keywords[kw]
如何使用名称返回时感到有点困惑,keywords
没有。
答案 0 :(得分:3)
因此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'
1}}
答案 1 :(得分:1)
关键字存储为字典。 (有关详细信息,请参阅this)
如果您打印字典本身,它将输出它包含的完整对(键,值)。
在您的计划上:
访问值的一种方法是使用其键“dict [key]
”搜索它所以当你写道:“keywords [kw]”你实际上是传递一个键而python会给你相应的值。
您可以认为它与访问数组值类似:
a = ['a', 'b', 'c']
如果你:
print a #output: ['a', 'b', 'c']
print a[0] # outputs: 'a'
与数组不同,数据不是“整齐地”存储在内存中,而是使用散列
希望它有所帮助,干杯
答案 2 :(得分: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
参数中 - 这就是那些*
和**
的用途。< / p>
现在,当你这样做时:
keys = sorted(keywords.keys())
for kw in keys:
print kw, ":", keywords[kw]
keyword.keys()
是['Shopkeeper', 'Client']
,即字典中的“键”。接下来,您对这些键进行排序,并为每个键打印字典中的相应条目,例如“John Cleese”为“Client”。