python - 执行生成器表达式的最pythonic方式是什么?

标签 python lazy-evaluation generator

越来越多的 Python 功能转向“惰性可执行文件”,例如生成器 表达式和其他类型的迭代器。 然而,有时我发现自己想要滚动一个单行“for”循环,只是为了执行一些操作。

要使循环真正执行,最符合 Python 风格的是什么?

例如:

a = open("numbers.txt", "w")
(a.write ("%d " % i) for i in xrange(100))
a.close()

不是真正的代码,但你明白我的意思。相反,如果我使用列表生成器,则会产生一个副作用,即创建一个 N 长的列表,其中填充了“无”。

目前我所做的是使用表达式作为调用“any”或“all”的参数。但我想找到一种不依赖于循环中执行的表达式结果的方法——“任何”和“所有”都可以根据评估的表达式停止。

需要说明的是,这些是我已经知道的方法,每个方法都有其缺点:

[a.write ("%d " % i) for i in xrange(100))]

any((a.write ("%d " % i) for i in xrange(100)))

for item in (a.write ("%d " % i) for i in xrange(100)): pass

最佳答案

有一种明显的方法可以做到这一点,这就是您应该采用的方法。没有借口以巧妙的方式做到这一点。

a = open("numbers.txt", "w")
for i in xrange(100):
    a.write("%d " % i)
d.close()

惰性执行给您带来了很大的好处:它允许您将一个序列传递给另一段代码,而不必将整个代码保存在内存中。它用于创建高效序列作为数据类型。

在这种情况下,您不希望延迟执行。你想要执行。你可以...执行。使用 for 循环。

关于python - 执行生成器表达式的最pythonic方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3209789/

相关文章:

haskell - 为什么这个 applicative 语句没有被懒惰地评估,我怎么能理解为什么?

python - 为什么我的生成器在 Python 中的实现不正确?

python - 生成器在 Python 中解包的奇怪行为

python - 有没有一种方便的方法可以将文件 uri 映射到 os.path?

javascript - 按钮上的 Google Analytics 事件跟踪

scala - Scala 中的 `def` 与 `val` 与 `lazy val` 评估

Clojure无限惰性序列,越界

javascript - 为什么 node.js 生成器没有按预期工作?

Python 需要 GIL。但是 Jython 和 IronPython 没有。为什么?

python - 在python中的if语句中评估表达式的结果