列出对副作用的理解 - 惯用正确或憎恶?

Goi*_*arn 3 python idiomatic

我有一个cheese对象列表.Cheese有一个方法,用db和whatnot做一堆东西,叫做out_of_stock().

所以:

[cheese.out_of_stock() for cheese in cheeses]
Run Code Online (Sandbox Code Playgroud)

对我来说这感觉很草率.就像我正在为一堆副作用(零库存)做某事(创建一个列表).

我是愚蠢的吗?这种方法是主观的吗?

Mar*_*som 10

列表推导用于创建列表.那不是你在这里做的,所以我会避免它.


Pet*_*ter 5

就个人而言,我会这样做

for cheese in cheeses:
    cheese.out_of_stock()
Run Code Online (Sandbox Code Playgroud)

这对我来说更加明确.这是另一条线,但我怀疑另一个程序员阅读该代码会理解它,而列表理解版本可能会有点混乱.另外,我可以想象其他人可能会在以后出现(不知道out_of_stock没有返回值)并尝试稍后使用该列表.

不过,我猜它没有任何问题.归根结底,它归结为谁将在以后阅读该代码(你自己或他人),以及他们是否会知道发生了什么.

编辑:此外,你正在使用一个可爱的函数编程构造从Haskell采取做令人讨厌的有状态的事情......