我正在浏览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 keywords,则会得到以下表示:
{'Shopkeeper': 'Ryan Lambert', 'Client': 'John Cleese'}我有点困惑,为什么打印keywords[kw]只会返回一个名称,而keywords不会。
发布于 2013-07-16 21:24:43
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'
发布于 2013-07-16 21:27:05
关键字存储为字典。(请参阅this了解更多信息)
如果您打印字典本身,它将输出它包含的完整对集(键、值)。
在你的程序中:
店主和'Client'
访问这些值的一种方法是用它的键“搜索”它:
所以当你写"keywordskw“的时候,你实际上是在传递一个键,而python会给你相应的值。
您可以将其视为类似于访问数组值:
a = ['a', 'b', 'c']如果您:
print a #output: ['a', 'b', 'c']
print a[0] # outputs: 'a'与数组不同的是,数据不是“整齐”地一起存储在内存中,而是使用散列
希望它能帮上忙,干杯
发布于 2013-07-16 21:34:39
使用调用函数时
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]关键字是['Shopkeeper', 'Client'],即字典中的“keyword.keys()”。接下来,对这些键进行排序,对于每个键,在字典中打印相应的条目,例如,"John Cleese“代表"Client”。
https://stackoverflow.com/questions/17677523
复制相似问题