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] )
代码执行过程拆解
- 遍历
cart字典的键(Python中遍历字典默认取键),依次得到'apple'和'egg' - 对每个
item,计算对应商品的总价:prices['apple'] * cart['apple'] = 0.75*1=0.75,prices['egg'] * cart['egg']=0.50*6=3.0 sum()会迭代生成器表达式产生的数值,依次累加:0 + 0.75 + 3.0 = 3.75,最终得到账单金额
生成器表达式的优势
和列表推导式相比,生成器表达式不会一次性把所有计算结果加载到内存中,而是迭代一个、计算一个、累加一个,在处理大量数据时能显著节省内存。
内容的提问来源于stack exchange,提问作者rodneyc8063
相关产品推荐
相关产品推荐

