Python эквивалент Lua сопрограмм? - PullRequest
0 голосов
/ 02 апреля 2020

Я работаю над игрой со стеком в Lua. Код основной игры использует сопрограммы в основной игре l oop для ожидания таких событий, как ввод ввода или завершение таймера. Я подумываю переключить его на Python, чтобы сделать его более переносимым, но я не могу понять, как правильно использовать async и await, чтобы быть эквивалентным сопрограммам Lua.

Следующий код представляет собой простой пример сопрограммы в Lua. Как бы я go написал о том же в 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

1 Ответ

1 голос
/ 02 апреля 2020

Это на самом деле очень похоже:

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
...