簡體   English   中英

從python中的while循環內部返回值

[英]Returning values from inside a while loop in python

我不知道這是一個簡單的問題還是不可能的問題或任何問題,但我找不到任何關於它的東西所以我想我會問它。

是否可以在循環仍在運行時從 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 循環在后台運行,但它只在詢問時給出結果,或類似的東西。

而是創建一個生成器。

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)

你要找的是yield

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


for x in func():
    print(x)

生成器也可以像列表理解一樣編寫:

看看這個問題:

“yield”關鍵字有什么作用?

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

我可能會想到嘗試找到位置、速度和加速度相對於時間的方程式。

所以你不需要保持,while循環運行,你需要的是將它轉換為一個函數,並利用2個函數調用之間的時間差,你可以執行你想要的計算,只有當你調用函數時,而不是讓 while 循環一直運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM