首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python关键字输出解释

Python关键字输出解释
EN

Stack Overflow用户
提问于 2013-07-16 21:13:38
回答 3查看 150关注 0票数 2

我正在浏览Python 2.7教程,并且查看了以下语句的输出:

代码语言:javascript
复制
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]

所以,如果我这样调用这个程序:

代码语言:javascript
复制
cheeseshop("Cheddar", "No.", "Seriously?",
       Shopkeeper="Michael Palin",
       Client="John Cleese")

它输出:

代码语言:javascript
复制
Do you have any Cheddar?
I'm sorry, we're all out of Cheddar
No.
Seriously?
--------------------------------------
Client: John Cleese
Shopkeeper: Michael Palin

这是正确的。

如果我将打印语句更改为print keywords,则会得到以下表示:

代码语言:javascript
复制
{'Shopkeeper': 'Ryan Lambert', 'Client': 'John Cleese'}

我有点困惑,为什么打印keywords[kw]只会返回一个名称,而keywords不会。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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变量实际上是一个字典类型。因此,如果您这样做了:

代码语言:javascript
复制
print keywords

您将返回(重新格式化以使映射更明显)

代码语言:javascript
复制
{
    'Shopkeeper': 'Ryan Lambert', 
    'Client': 'John Cleese'
}

这是一本字典。如果你这样做了:

代码语言:javascript
复制
print keywords[kw]

您将获得与键kw相关联的字典的值。所以如果kw'Shopkeeper',那么keywords[kw]就变成了'Ryan Lambert',如果kw'Client',那么keywords[kw]就变成了'John Cleese'

票数 2
EN

Stack Overflow用户

发布于 2013-07-16 21:27:05

关键字存储为字典。(请参阅this了解更多信息)

如果您打印字典本身,它将输出它包含的完整对集(键、值)。

在你的程序中:

店主和'Client'

  • values分别是:‘
  • ’和'John Cleese'

访问这些值的一种方法是用它的键“搜索”它:

所以当你写"keywordskw“的时候,你实际上是在传递一个键,而python会给你相应的值。

您可以将其视为类似于访问数组值:

代码语言:javascript
复制
a = ['a', 'b', 'c']

如果您:

代码语言:javascript
复制
print a #output: ['a', 'b', 'c']    
print a[0] # outputs: 'a'

与数组不同的是,数据不是“整齐”地一起存储在内存中,而是使用散列

希望它能帮上忙,干杯

票数 0
EN

Stack Overflow用户

发布于 2013-07-16 21:34:39

使用调用函数时

代码语言:javascript
复制
cheeseshop("Cheddar", "No.", "Seriously?",
           Shopkeeper="Michael Palin", Client="John Cleese")

keywords参数的值为{'Shopkeeper': 'Ryan Lambert', 'Client': 'John Cleese'},即它是一个字典。

这等同于(而且比起)调用函数更容易读懂

代码语言:javascript
复制
cheeseshop("Cheddar", *["No.", "Seriously?"],
           **{"Shopkeeper":"Michael Palin", "Client":"John Cleese"})

也就是说,第一个函数调用中的值自动包装在*arguments**keywords参数中--这就是***的用途。

现在,当你这样做的时候:

代码语言:javascript
复制
keys = sorted(keywords.keys())
for kw in keys:
    print kw, ":", keywords[kw]

关键字是['Shopkeeper', 'Client'],即字典中的“keyword.keys()”。接下来,对这些键进行排序,对于每个键,在字典中打印相应的条目,例如,"John Cleese“代表"Client”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17677523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档