繁体   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