有人知道如何在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语句同时运行,而不是一个接一个地运行。
发布于 2020-03-24 16:54:53
你说的同时到底是什么意思。
1.)Python (默认的python实现)使用GIL (全局解释器锁),因此您永远不会在多个CPU上同时执行两个python语句。
因此在性能方面不会有任何好处。
如果您的意思是,第一个If语句可能会更改if语句中的值,从而使第二个check语句变为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)发布于 2020-03-24 17:11:05
如果我没理解错的话,你并不是真的想并行运行这些语句(一次4条指令),而是想要单次求值而不是4条eval,对吧?
现在你在最好的情况下和最坏的情况下都运行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个操作。
发布于 2020-03-24 19:30:51
如果使用临时变量将位置确定与移动操作分开,这将更容易(也更清楚):
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)卢卡和尼克的移动方向似乎也不一致(卢卡在前进时向后移动,但尼克仍在前进)。问题中没有足够的信息来确定这是故意的还是偶然的
https://stackoverflow.com/questions/60826235
复制相似问题