Python等价于Lua协程?

Python等价于Lua协程?,python,python-3.x,lua,coroutine,equivalent,Python,Python 3.x,Lua,Coroutine,Equivalent,我一直在卢阿做积木游戏。核心游戏代码在主游戏循环中使用协程,以等待事件,如输入按下或计时器结束。我正在考虑将其转换为Python,以使其更具可移植性,但我不知道如何正确地使用async和wait,以等效于Lua的协同程序 下面的代码是Lua中的一个简单协同路由示例。我将如何用Python编写相同的代码,同时保持相同的行为 function myCoroutine(arg1) print(arg1) local newValue = coroutine.yield(arg1 +

我一直在卢阿做积木游戏。核心游戏代码在主游戏循环中使用协程,以等待事件,如输入按下或计时器结束。我正在考虑将其转换为Python,以使其更具可移植性,但我不知道如何正确地使用
async
wait
,以等效于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

实际上非常相似:

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

非常感谢。我原以为这与
asyncio
有关,但我不知道
yield
如果我错了,请纠正我的错误,但这些只是无堆栈的协程,对吗?如果是这样的话,它们就没有Luas stackful协程那么强大,只是部分替代品。