[英]How do you concurrently run 4 if statements in python?
有誰知道如何在python中同時運行兩個if語句?
for i in range(160):
luca.speed = 1
if luca.pos() > nick.pos() and luca.pos() > bob.pos():
luca.backward(luca.speed + 2)
if luca.pos() < nick.pos() and luca.pos() < bob.pos():
luca.forward(luca.speed + 3)
nick.speed = 1
if luca.pos() > nick.pos() and bob.pos() > nick.pos():
nick.forward(nick.speed + 8.5)
if luca.pos() < nick.pos() and bob.pos() < nick.pos():
nick.forward(nick.speed)
我試圖讓這 4 個 if 語句同時運行,而不是一個接一個地運行。
究竟你的意思是在同一時間什么。
1.) Python(默認的python實現)使用GIL(全局解釋器鎖),所以你永遠不會在多個CPU上同時執行兩個python語句。
因此,性能方面不會有任何好處。
如果您只是想說,第一個 if 語句可能會更改 if 語句中的值,從而使第二個檢查為 false,那么您在 if 表達式中使用的值的簡單緩存就足夠了。
for i in range(160):
luca.speed = 1
luca_pos = luca.pos()
nic_pos = nic.pos()
bob_pos = bob.pos()
if luca_pos > nick_pos and luca_pos > bob_pos:
luca.backward(luca.speed + 2)
if luca_pos < nick_pos and luca_pos < bob_pos:
luca.forward(luca.speed + 3)
nick.speed = 1
if luca_pos > nick_pos and bob_pos > nick_pos:
nick.forward(nick.speed + 8.5)
if luca_pos < nick_pos and bob_pos < nick_pos:
nick.forward(nick.speed)
如果我理解正確,您並不是真的想並行運行這些語句(一次 4 條指令),而是需要單次評估而不是 4 次評估,對嗎?
現在你在最好的情況和最壞的情況下運行 4 if,每個都有 2 個比較,所以每次 8 個操作。 讓我們嘗試重構代碼——它需要假設 luca.pos 永遠不等於 nick.pos,或者我們可以用 >= 替換 >:
luca.speed = 1
nick.speed = 1
if luca.pos() >= nick.pos():
if luca.pos() > bob.pos():
luca.backward(luca.speed + 2)
if bob.pos() > nick.pos():
nick.forward(nick.speed + 8.5)
else:
if luca.pos() < bob.pos():
luca.forward(luca.speed + 3)
if bob.pos() < nick.pos():
nick.forward(nick.speed)
這是最好和最壞情況下的 3 個操作。
如果您使用臨時變量將位置確定與移動動作分開,這將更容易(也更清晰):
for i in range(160):
lucaAhead = luca.pos() > nick.pos() and luca.pos() > bob.pos()
lucaBack = luca.pos() < nick.pos() and luca.pos() < bob.pos()
nickBack = luca.pos() > nick.pos() and bob.pos() > nick.pos()
nickAhead = luca.pos() < nick.pos() and bob.pos() < nick.pos()
luca.speed = 1
if lucaAhead:
luca.backward(luca.speed + 2)
if lucaBack:
luca.forward(luca.speed + 3)
nick.speed = 1
if nickBack:
nick.forward(nick.speed + 8.5)
if nickAhead:
nick.forward(nick.speed)
盧卡和尼克之間的移動方向似乎也不一致(盧卡在前進時向后移動,但尼克仍在前進)。 問題中沒有足夠的信息來確定這是有意的還是偶然的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.