繁体   English   中英

Python - 这个 function 中的变量如何通过字典进行?

[英]Python - how does a variable from this function progress through a dictionary?

我很难理解下面代码的一部分。 我能够在在线课程中正确理解它,所以我不是在寻求帮助来完成它,只是理解这一点:在最后一段代码中,我对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

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

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

for k in dict: ...

这相当于,但比

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

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

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

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

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)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM