是否已有python生成器执行这些基本操作?

mur*_*own 3 python iterator generator

我发现自己使用这两个自定义生成器,并认为"必须有一个itertools函数或者已经做到这一点的东西!但是没有发现任何东西.我错过了什么吗?谢谢!

def gothru(iters):
  for i in iters:
    for j in i:
      yield j

def overnover(fn,startval):
  val = startval
  while True:
    val = fn(val)
    yield val
Run Code Online (Sandbox Code Playgroud)

编辑:我后来想象如何overnover用于生成斐波纳契序列,我意识到它需要被推广以允许函数有多个参数

def overnover(fn,*args):
  while True:
    args = fn(*args)
    return args
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

fibInfo = overnover(lambda x,y: (x+y, x), 1, 1)
Run Code Online (Sandbox Code Playgroud)

- >(2,1)......(3,2)...(5,3)...(8,5)......然后:

fib = imap(lambda x:x[0], fibInfo)
Run Code Online (Sandbox Code Playgroud)

- > 2 ... 3 ... 5 ... 8 ......

多谢你们!

agf*_*agf 5

第一个是chain.from_iterable.

最接近的overnovertabulate:

def tabulate(function, start=0):
    "Return function(0), function(1), ..."
    return imap(function, count(start))
Run Code Online (Sandbox Code Playgroud)

这是函数的一个特例,它输出序列号.count也需要一个step,所以你可以将其概括为

def tabulate(function, start=0, step=1):
    "Return function(0), function(0+step), ..."
    return imap(function, count(start, step))
Run Code Online (Sandbox Code Playgroud)

这是一个overnover允许您将值发送到序列中的版本:

def overnover(fn, val):
    while True:
        val = fn(val)
        val = (yield val) or val
Run Code Online (Sandbox Code Playgroud)