仅为实现副作用使用集合推导式是否符合Pythonic编码规范?
结论
你的判断在最终集合的大小层面是正确的,但这种写法本身存在非常大的问题,完全不推荐使用。
具体解释
- 关于集合大小的判断:你说得对,因为
side_effects_only固定返回None,集合推导式运行时,每调用一次函数得到的None尝试加入集合时,都会因为None已经存在而被自动去重。所以无论Y的规模有多大,最终生成的集合永远只会包含1个None元素,不会占用大量内存,不会出现巨型集合。 - 但这种写法属于典型的推导式滥用,问题非常突出:
- 可读性极差:推导式的设计初衷是生成新的容器对象,所有阅读代码的人都会默认你需要使用这个生成的集合,完全想不到你只是为了执行函数的副作用,后续维护很容易出问题。
- 健壮性极低:如果后续修改
side_effects_only的实现,让它返回非None的值,或者返回值可能发生变化,集合会立刻随着Y的规模增长占用大量内存,相当于埋下了隐性的性能炸弹。
正确写法
直接使用普通for循环即可,没有任何多余的开销,逻辑清晰直白:
for x in Y: side_effects_only(x)
内容的提问来源于stack exchange,提问作者k1m190r
相关产品推荐
相关产品推荐

