越来越多的 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/