3

簡単な質問なのか、不可能なのか、なにかわかりませんが、何も見つからなかったので、聞いてみようと思いました。

whileループがまだ実行されている間に、そのループから値を返すことは可能ですか?基本的に私がやりたいのは、ベクトルをwhileループ内で絶えず更新することですが、whileループを停止せずに、要求されたときに値を返すことができます。これは可能ですか?プログラムを分割してwhileループを別のスレッドに入れる必要がありますか、それとも1つの関数内で実行できますか?

また、(明らかに)計算集約的ではなく、レート制限された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 に答える