由于一些奇怪的原因,我正在努力解决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)
答案 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!
情侣笔记:
a / b
如果a
和b
都是整数(4 / 3 == 1
)则返回整数 - 你可以通过使用来避免这种情况float
或from __future__ import division
,