我正在继续我的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的解释
3条答案
按热度按时间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
中的项的最终总和。yyhrrdl82#
在
sum()
里面的代码是一个生成器表达式,它基本上是语法上的糖,用于从另一个迭代器创建一个迭代器。在您的示例中,
cart
变量是Dictionary
类型的对象,它也是一个迭代器,prices[item] * cart[item]
部分是cart
中的每个项(字典键)如何转换为结果迭代器的新项。代码段
bill = sum(prices[item] * cart[item] for item in cart)
等效于abithluo3#
尝试阅读列表解析。
它们基本上是一种编写简单for循环的单行方式。
因为这些函数创建列表,所以可以将它们提供给使用列表的函数(或者更一般地说是迭代函数),比如sum: