首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中并发运行4条if语句?

如何在python中并发运行4条if语句?
EN

Stack Overflow用户
提问于 2020-03-24 14:59:16
回答 3查看 151关注 0票数 0

有人知道如何在python中同时运行两个if语句吗?

代码语言:javascript
复制
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语句同时运行,而不是一个接一个地运行。

EN

回答 3

Stack Overflow用户

发布于 2020-03-24 16:54:53

你说的同时到底是什么意思。

1.)Python (默认的python实现)使用GIL (全局解释器锁),因此您永远不会在多个CPU上同时执行两个python语句。

因此在性能方面不会有任何好处。

如果您的意思是,第一个If语句可能会更改if语句中的值,从而使第二个check语句变为false,那么您在if表达式中使用的简单值缓存就足够了。

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2020-03-24 17:11:05

如果我没理解错的话,你并不是真的想并行运行这些语句(一次4条指令),而是想要单次求值而不是4条eval,对吧?

现在你在最好的情况下和最坏的情况下都运行4个if,每个有2个比较,所以每次8个操作。让我们尝试重构代码-它需要假设luca.pos永远不会等于nick.pos,或者我们可以用>=替换>:

代码语言:javascript
复制
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个操作。

票数 0
EN

Stack Overflow用户

发布于 2020-03-24 19:30:51

如果使用临时变量将位置确定与移动操作分开,这将更容易(也更清楚):

代码语言:javascript
复制
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)

卢卡和尼克的移动方向似乎也不一致(卢卡在前进时向后移动,但尼克仍在前进)。问题中没有足够的信息来确定这是故意的还是偶然的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60826235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档