-1

我很难理解下面代码的一部分。我能够在在线课程中正确理解它,所以我不是在寻求帮助来完成它,只是理解这一点:在最后一段代码中,我对xfood的工作方式感到困惑。x 如何处理价格中的项目?

shopping_list = ["banana", "orange", "apple"]

stock = {
  "banana": 6,
  "apple": 0,
  "orange": 32,
  "pear": 15
}

prices = {
  "banana": 4,
  "apple": 2,
  "orange": 1.5,
  "pear": 3
}

def compute_bill(food):
  total = 0
  for x in food:
    total = total + prices[x]
  return total
4

2 回答 2

0

Python dictionaries(和其他 Python 数据结构)实现了所谓的iterator模式,它按顺序一次获取一项,直到遍历整个数据结构。

字典实现了一个 tp_iter 槽,它返回一个高效的迭代器,该迭代器对字典的键进行迭代。在这样的迭代期间,不应修改字典,除非允许为现有键设置值(不允许删除或添加,update() 方法也不允许)。这意味着我们可以写

for k in dict: ...

这相当于,但比

for k in dict.keys(): ...

只要不违反对字典修改的限制(通过循环或另一个线程)。

代码:for x in food:只需iterator在python中初始化dict并重复调用它以获取下一项直到最后一项。

这就是它在 python(以及其他语言)中的工作方式。Python 内部知道dict实现一个iteratorfor循环在下面调用这个迭代器。

于 2020-04-12T17:05:11.717 回答
0

prices是一个字典,键(香蕉、苹果、...)到值(4、2、...)的映射。

for x in food意思是“对于提供的列表中称为 的每个项目food,给它一个临时变量赋值x并用 . 做一些事情x。”

total = total + prices[x]表示“将当前价值total添加到项目的价格x(从价格中查找)”。对于food(在本例中为香蕉)中的第一项,您正在寻找相应的价格prices(即 4)。所以,您实际上是在说total = 0 + 4,然后转到 中的下一个项目food。由于total现在设置为 4,因此您的分配变为total = 4 + price['orange'], 或4 + 1.5。完全迭代列表后,您将得到一个total总和(在您的示例中为 7.5)。

于 2020-04-12T17:08:41.013 回答