已经有python生成器完成这些基本的工作了吗?

2024-10-03 06:20:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现自己正在使用这两个自定义生成器,并在想“一定有一个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

编辑:我后来想到了如何使用overnover来生成斐波那契序列,我意识到需要对其进行泛化,以允许函数有多个参数

def overnover(fn,*args):
  while True:
    args = fn(*args)
    return args

然后你可以做:

fibInfo = overnover(lambda x,y: (x+y, x), 1, 1)

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

fib = imap(lambda x:x[0], fibInfo)

->;2。。。三。。。5 ... 8 ... 你知道吗

谢谢你们!你知道吗


Tags: lambda函数intruefordefargsval
1条回答
网友
1楼 · 发布于 2024-10-03 06:20:01

第一个是^{}。你知道吗

最接近overnover的是^{}

def tabulate(function, start=0):
    "Return function(0), function(1), ..."
    return imap(function, count(start))

这是函数的一个特例,它输出序列号。count也需要step,所以你可以把它推广到

def tabulate(function, start=0, step=1):
    "Return function(0), function(0+step), ..."
    return imap(function, count(start, step))

以下是overnover的一个版本,它允许您将值发送到序列中:

def overnover(fn, val):
    while True:
        val = fn(val)
        val = (yield val) or val

相关问题 更多 >