Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有带生成器的静态类型语言?_Python_Static_Generator - Fatal编程技术网

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

我最近一直在大量使用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
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添加了一个不在内存中构建前缀的导管示例