有没有办法在异步 python 中等待值



基本上我正在尝试在Python中使用异步代码。首先,我想我会做一个斐波那契计算器。我在使用它时遇到问题,这是我的代码

import asyncio as a
cache = {}
async def fib(n):
if n < 10:
a.sleep(0.001)
else:
if n in cache:
result = cache[n]
else:
result = await fib(n - 2) + await fib(n - 1)
cache[n] = result
return result
async def main():
res = await fib(100)
print(res)
a.run(main())

我得到的错误是

Warning (from warnings module):
File "<pyshell#3>", line 4
RuntimeWarning: coroutine 'sleep' was never awaited
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
a.run(main())
File "C:UsersOwnerAppDataLocalProgramsPythonPython38-32libasynciorunners.py", line 43, in run
return loop.run_until_complete(main)
File "C:UsersOwnerAppDataLocalProgramsPythonPython38-32libasynciobase_events.py", line 616, in run_until_complete
return future.result()
File "<pyshell#5>", line 2, in main
res = await fib(100)
File "<pyshell#3>", line 9, in fib
result = await fib(n - 2) + await fib(n - 1)
File "<pyshell#3>", line 9, in fib
result = await fib(n - 2) + await fib(n - 1)
File "<pyshell#3>", line 9, in fib
result = await fib(n - 2) + await fib(n - 1)
[Previous line repeated 43 more times]
File "<pyshell#3>", line 11, in fib
return result
UnboundLocalError: local variable 'result' referenced before assignment

谢谢。

您错过了初始化值。它们预添加到下面的缓存中:

import asyncio as a
cache = {0: 0, 1: 1}
async def fib(n):
if n in cache:
result = cache[n]
else:
result = await fib(n - 2) + await fib(n - 1)
cache[n] = result
return result
async def main():
res = await fib(100)
print(res)
a.run(main())

最新更新