2012-05-13 40 views
0

由于一些奇怪的原因,我正在努力让我的头在Python中使用的迭代器/生成器(我在C++中编写/使用它们时没有问题 - 但不知何故,我似乎无法琢磨如何使用Python编写一个)。如何为这个函数编写一个生成器

我有形式的数学函数:

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

其中V1和V2是相同的长度1D向量。

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

任何人都可以帮忙吗?

[编辑]

我用符号可能是混乱的。我希望澄清一下。上述函数返回值为的集合。随着参数b取的价值观,在间隔(a,b]

因此,举例来说,如果我们称之为f(1,5),该函数将返回以下(不是函数-in情况下面我澄清会导致进一步的混乱):

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

为什么你需要一个发电机? – Tadeck

+1

在这个计算中没有任何迭代。你想用什么*发生器*? – kindall

+0

@Tadeck:我根据你的问题澄清了这个问题。请参阅上文。 –

回答

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]) 
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) - 您可以通过使用float s或from __future__ import division
相关问题