3

我不知道这是一个简单的问题还是不可能的问题,但我在上面找不到任何东西,所以我想我会问它。

是否可以在循环仍在运行时从 while 循环返回值?基本上我想要做的是让一个向量在一个while循环中不断更新,但能够在不停止while循环的情况下在被询问时返回值。这可能吗?我只需要分解程序并将while循环放在一个单独的线程中,还是可以在一个函数中完成?

此外,我更喜欢一种计算量不密集的方法(显然),并且与速率限制的 while 循环兼容,因为这个方法肯定是速率限制的。

同样,如果这是一个愚蠢的问题,请告诉我,我将删除它,但我无法找到有关此的文档。

我正在尝试使用以下代码实现此代码:

def update(self, x_motion, y_motion, z_motion):
        self.x_pos += self.x_veloc
        self.y_pos += self.y_veloc
        self.z_pos += self.z_veloc
        self.x_veloc += self.x_accel
        self.y_veloc += self.y_accel
        self.z_veloc += self.z_accel
        self.x_accel = x_motion[2]
        self.y_accel = y_motion[2]
        self.z_accel = z_motion[2]
while True:
self.update(x_motion, y_motion, z_motion)

print vector.x_accel

至少在这些方面。重要的是这些返回在 while 循环之外,以便 while 循环在后台运行,但它只在被询问时给出结果,或者类似的东西。

4

3 回答 3

6

而是创建一个生成器。

def triangle():
  res = 0
  inc = 1
  while True:
    res += inc
    inc += 1
    yield res

t = triangle()
print next(t)
print next(t)
print next(t)
print next(t)

编辑:

或者也许是一个协程。

def summer():
  res = 0
  inc = 0
  while True:
    res += inc
    inc = (yield res)

s = summer()
print s.send(None)
print s.send(3)
print s.send(5)
print s.send(2)
print s.send(4)
于 2012-06-23T19:52:18.763 回答
4

您正在寻找的是yield

def func():
    while True:
        yield "hello"


for x in func():
    print(x)

生成器也可以写成列表推导式:

看看这个问题:

“yield”关键字有什么作用?

于 2012-06-23T19:52:07.867 回答
0

如果我理解你和你想做的代码。

我可能会考虑尝试找到关于时间的位置、速度和加速度方程。

所以你不需要保持,while循环运行,你需要将它转换为一个函数,并使用2个函数调用之间的时间差,你可以执行你想要的计算,只有当你调用函数时,而不是一直运行 while 循环。

于 2012-06-23T23:18:44.227 回答