Python 相当于 Lua 协程?
Python equivalent of Lua coroutines?
我一直在 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
其实很像:
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
我一直在 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
其实很像:
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