簡體   English   中英

你如何在python中同時運行4個if語句?

[英]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.

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