如何为此函数编写生成器

时间:2012-05-13 19:58:57

标签: python

由于一些奇怪的原因,我正在努力解决Python中使用的迭代器/生成器(我在C ++中编写/使用它们没有问题 - 但不知怎的,我似乎无法理解如何使用Python编写一个)。

我有以下形式的数学函数:

f(a,b) = ( v1(a) - v1(b) ) / ( v2(a) - v2(b) )

其中v1和v2是等长的1D向量。

我想写一个函数(实际上是一个生成器),它生成如上定义的f()的输出。

有人可以帮忙吗?

[[编辑]]

我的记法可能令人困惑。我希望澄清一下。上述函数返回 set 值。参数b采用值(a,b]

例如,如果我们调用f(1,5),该函数将返回以下(不是函数 - 如果我的澄清导致进一步混淆):

f(1,1)
f(1,2)
f(1,3)
f(1,4)
f(1,5)

2 个答案:

答案 0 :(得分:1)

您可以使用生成器表达式:

def f(a, b):
  return ((v1[a] - v1[i]) / (v2[a] - v2[i]) for i in xrange(a, b+1))

或生成器功能

def f(a, b):
  for i in xrange(a, b+1)
    yield (v1[a] - v1[i]) / (v2[a] - v2[i])

答案 1 :(得分:0)

生成器可能看起来像那样,因为没有迭代(如kindall correctly noted)。

def f(a, b):
    yield (v1[a] - v1[b]) / (v2[a] - v2[b])  # be careful about division!

情侣笔记:

  • 没有任何内容可以迭代,生成器通常用于迭代,
  • 要小心划分:在Python 2.x中a / b如果ab都是整数(4 / 3 == 1)则返回整数 - 你可以通过使用来避免这种情况floatfrom __future__ import division