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