0

出于某种奇怪的原因,我很难理解 Python 中使用的迭代器/生成器(我在 C++ 中编写/使用它们没有问题 - 但不知何故,我似乎无法理解如何使用 Python 编写一个)。

我有一个形式的数学函数:

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

其中 v1 和 v2 是等长的一维向量。

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

任何人都可以帮忙吗?

[[编辑]]

我的符号可能令人困惑。我希望澄清这一点。上述函数返回一值。随着参数 b 取值,在区间(a,b]

因此,例如,如果我们调用f(1,5),该函数将返回以下(不是函数 - 以防我在下面的说明引起进一步的混乱):

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

2 回答 2

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])
于 2012-05-14T05:29:21.460 回答
0

生成器可能看起来像这样,因为没有迭代(如正确指出的那样)。

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

情侣笔记:

  • 没有什么可以迭代的,生成器一般用在迭代中,
  • 小心除法:在 Python 2.x 中,a / b如果ab都是整数,则返回整数(所以)——你可以通过使用s 或 by4 / 3 == 1来避免这种情况,floatfrom __future__ import division
于 2012-05-13T20:05:14.410 回答