为何Python协程实现的递归斐波那契未触发无限递归?
协程绕过Python递归限制的疑问:为何未触发无限递归?
我尝试用协程绕过Python的递归限制,反复试验写出了一段递归计算斐波那契数的代码。但我有个疑问:这段代码为什么没有触发无限递归?
我原本以为lambda中的f(x)会被立即求值,这看起来会直接导致无限递归。但实际用调试器单步执行代码时,lambda似乎完全跳过了f(x)的求值,直接将一个协程传递给了asyncio.create_task。
补充说明:我使用的是Python 3.10.10版本。
编辑补充:为了澄清上述疑问,我用以下代码替代了原lambda:
def my_create_task(c): return asyncio.create_task(c) def recursive(f): def callf(x): return my_create_task(f(x)) return callf
持续按“单步进入”时的执行流程是:
- 进入callf
- 进入my_create_task,参数c绑定了一个协程——我原本以为调试器会在这里进入f
- 从my_create_task返回
- 从callf返回
- 进入x=2000的f函数
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

