Python - SUM(迭代器,FOR循环)-这是如何工作的?

laik7k3q  于 2023-01-12  发布在  Python
关注(0)|答案(3)|浏览(184)

我正在继续我的Python学习之旅,遇到了一段代码片段,我对它在Python中的SUM()函数是如何工作的感到非常困惑。
代码如下所示

prices = {'apple': 0.75, 'egg': 0.50}
cart = {
  'apple': 1,
  'egg': 6
}

bill = sum(prices[item] * cart[item]
           for item in cart)

print(f'I have to pay {bill:.2f}')

这个的最终输出是“我得付3. 75”
真正让我困惑的部分是在SUM函数中使用“迭代器”或“for item in cart”
python文档中关于SUM函数的说明
sum(可迭代,[start])
可迭代的:字符串、列表、字典等。
开始:添加到最终结果的可选数值。默认值为0。
例如如果用这个代码

sum([1,2,3], 4)

这基本上可以得出1+2+3+4=10,这对我来说是有意义的。
所以我很困惑代码片段的“for循环”部分是法律的的吗?
我试着在谷歌上搜索,但是我发现大多数例子都很简单,就像我刚才提到的那样,而且我找不到任何关于FOR循环如何像这样使用SUM的解释

xe55xuns

xe55xuns1#

prices[item] * cart[item] for item in cart是一个生成器,它生成一个可迭代对象,sum函数将其作为第一个参数。
for item in cart迭代cart字典中的每个键,所以在本例中,它将迭代列表['apple', 'egg'],依次将item设置为每个键。表达式prices[item] * cart[item]查找项目的价格(例如prices['apple']),然后将其乘以项目的数量(例如cart['apple'])。生成器产生一个序列,该序列由针对cart中的每个关键字计算该表达式的值的结果组成,然后sum取该序列并将其元素加在一起以得出cart中的项的最终总和。

yyhrrdl8

yyhrrdl82#

sum()里面的代码是一个生成器表达式,它基本上是语法上的糖,用于从另一个迭代器创建一个迭代器。
在您的示例中,cart变量是Dictionary类型的对象,它也是一个迭代器,prices[item] * cart[item]部分是cart中的每个项(字典键)如何转换为结果迭代器的新项。
代码段bill = sum(prices[item] * cart[item] for item in cart)等效于

bill = 0
for item in cart:
  bill += prices[item] * cart[item]
abithluo

abithluo3#

尝试阅读列表解析。
它们基本上是一种编写简单for循环的单行方式。
因为这些函数创建列表,所以可以将它们提供给使用列表的函数(或者更一般地说是迭代函数),比如sum:

list_of_nums = [1, 2, 3, 4]
list_of_squares = [num**2 for num in list_of_nums]
print(list_of_squares)
>>> [1, 4, 9, 16]

相关问题