Python 有没有带生成器的静态类型语言?
我最近一直在大量使用Python,并且一直在想,是否有任何现代静态类型语言对生成器(如Python 有没有带生成器的静态类型语言?,python,static,generator,Python,Static,Generator,我最近一直在大量使用Python,并且一直在想,是否有任何现代静态类型语言对生成器(如 def gen(): for i in range(10): yield i << 100 for big_num in gen(): print(big_num) def gen(): 对于范围(10)内的i: yield iHaskell具有更一般的功能,但肯定能够实现与Python生成器非常相似的行为: import Control.Monad impor
def gen():
for i in range(10):
yield i << 100
for big_num in gen():
print(big_num)
def gen():
对于范围(10)内的i:
yield iHaskell具有更一般的功能,但肯定能够实现与Python生成器非常相似的行为:
import Control.Monad
import Data.Bits
import Data.Conduit
import qualified Data.Conduit.List as CL
gen :: (Monad m) => Source m Integer
gen = forM_ [0..9] $ \i ->
yield (i `shiftL` 100)
main = gen $$ CL.mapM_ print
这个问题确实离题了,但我建议看一下Scala的Stream
类,它有生成惰性序列的方法Scala确实有与生成器非常相似的特性。例如,For(i@Daenyth我已经告诉Haskell的家伙,生成器不仅仅是关于懒惰,还关于暂停(它们是一种有限形式的协同程序)和语法。谷歌搜索结果似乎表明可以在scala中的库中实现协同路由。不完全相同。在您评估take 10 gen
后,gen
的前10个元素将在gen
的生命周期内保留在内存中,而生成器不会在内存中存储任何内容。@sepp2k不要放弃优化,我怀疑在这种情况下,对于任何一个优秀的编译器来说,生成程序不仅仅是关于懒惰,而且还涉及到一种表达普通代码的便捷方式,其中包含了暂停点。“Iterable”是一个更接近Python的概念,道德上等同于你的gen
应该是map(lambda n:n@delnan好的,那么源m整数可能是更好的analogon@delnan添加了一个不在内存中构建前缀的导管示例