Python中如何通过一行语句结合for循环结果使用+=操作
Python中批量执行累加操作的正确实现
你遇到的语法错误原因很明确:Python的列表推导式要求内部是表达式(能返回值的代码片段),而page += item.func()是赋值语句(用来修改变量,没有返回值),所以不能放在列表推导式里。
下面给几种可行的实现方式:
1. 保留原循环写法(推荐)
原代码本身可读性极强,完全没必要强行改成“简洁”写法,Python官方也优先推荐易读的代码:
for item in items: page += item.func()
2. 用functools.reduce实现紧凑写法
如果确实需要更紧凑的代码,可以用reduce来累加,适用于数值、字符串等所有支持+操作的类型:
from functools import reduce page = reduce(lambda acc, item: acc + item.func(), items, page)
这里reduce会以初始值page为起点,依次把每个item.func()的结果累加到acc上,最后返回更新后的page。
3. 字符串拼接专用优化写法
如果page是字符串,item.func()返回的也是字符串,用str.join()的效率远高于循环累加:
page += ''.join(item.func() for item in items)
生成器表达式(item.func() for item in items)会逐个生成字符串片段,join一次性完成拼接,避免了循环中多次字符串拷贝的性能损耗。
注意:列表推导式的设计目的是生成新列表,不是用来执行修改外部变量这类“副作用”操作,强行用推导式做赋值既不符合语法,也会降低代码可读性。
内容的提问来源于stack exchange,提问作者Hemant Satam
相关产品推荐
相关产品推荐

