You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中SUM函数结合迭代器与for循环的工作原理疑问

问题解答:sum()中for循环写法的合法性

你看到的sum()里的prices[item] * cart[item] for item in cart是生成器表达式,它是Python原生支持的可迭代对象,完全符合sum()函数对第一个参数的要求。

核心解释

生成器表达式的语法和列表推导式非常相似,只是把列表推导式的方括号[]替换为括号(当它作为函数的唯一参数时,括号可以省略)。比如你代码里的写法等价于:

# 显式添加括号的生成器表达式
bill = sum( (prices[item] * cart[item] for item in cart) )

也等价于用列表推导式的写法(但生成器更高效):

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

代码执行过程拆解

  1. 遍历cart字典的键(Python中遍历字典默认取键),依次得到'apple'和'egg'
  2. 对每个item,计算对应商品的总价:prices['apple'] * cart['apple'] = 0.75*1=0.75,prices['egg'] * cart['egg']=0.50*6=3.0
  3. sum()会迭代生成器表达式产生的数值,依次累加:0 + 0.75 + 3.0 = 3.75,最终得到账单金额

生成器表达式的优势

和列表推导式相比,生成器表达式不会一次性把所有计算结果加载到内存中,而是迭代一个、计算一个、累加一个,在处理大量数据时能显著节省内存。

内容的提问来源于stack exchange,提问作者rodneyc8063

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:10:26