python - 有没有办法在异步 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:\Users\Owner\AppData\Local\Programs\Python\Python38-32\lib\asyncio\runners.py", line 43, in run
return loop.run_until_complete(main)
File "C:\Users\Owner\AppData\Local\Programs\Python\Python38-32\lib\asyncio\base_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())
推荐阅读
- ios - 如何在 firebase 实时数据库中删除我的数据?
- global-variables - 当两个文件都在同一个金属器中时,如何将一个 .bb 文件中的变量 PV 用于另一个 bbappend 文件?
- python - 如何在 Python 中求解分段线性规划方程?
- javascript - 在按钮单击事件上渲染新的反应组件
- django - Djando DateField 抛出“无效”
- amazon-web-services - AWS Config 可以写入启用对象锁定的 S3 存储桶吗?
- react-native - 使用 ant design (React Native) 中的组件时收到警告
- css - 在微调器/加载器运行时禁用背景
- google-chrome - 禁用 chrome 中特定脚本或样式表文件的缓存
- javascript - 使用 Express 处理 React 应用程序的路线?