Python中与Lua协程等效的方法?

我正在Lua中开发一个砖块堆叠游戏。核心游戏代码在主游戏循环中使用协程来等待事件,比如输入按键或计时器完成。我考虑将其转移到Python中,以使它更加可移植,但我无法正确使用“async”和“await”以等效于Lua的协程。

以下代码是Lua中的简单协程示例。如果我要编写相同的Python代码,并具有相同的行为,该怎么做?

function myCoroutine(arg1)

    print(arg1)
    local newValue = coroutine.yield(arg1 + 2)
    print(newValue)

    local lastValue = coroutine.yield(arg1 * newValue^2)
    print(lastValue)

end

local co = coroutine.create(myCoroutine)

local success, yield1 = coroutine.resume(co, 10)
local success, yield2 = coroutine.resume(co, yield1 * 2)
coroutine.resume(co, yield2 / 3)

期望输出:

10
24
1920
点赞
用户10611983
用户10611983

实际上非常类似:

def myCoroutine():

    arg1 = (yield)
    print(arg1)

    newValue = (yield arg1 + 2)
    print(newValue)

    lastValue = (yield arg1 * newValue ** 2)
    print(lastValue)

co = myCoroutine()
co.send(None) # "prime" the coroutine
try:
    yield1 = co.send(10)
    yield2 = co.send(yield1 * 2)
    co.send(yield2 // 3)
except StopIteration:
    pass
2020-04-02 03:32:37