异步中的 lambda call_later

lambdas in asyncio call_later

Python 3.7.2 关于异步事件循环的文档在 call_later 函数的文档中说:

The optional positional args will be passed to the callback when it is called. If you want the callback to be called with keyword arguments use functools.partial().

对于这种情况,使用 functools.partial 是否优于使用 lambda

Is using functools.partial considered superior to using lambda for this case?

"Superior" 这个词太强了。说 functools.partial 是简单参数绑定的 "one obvious choice" 可能是正确的。

lambda相比,functools.partial的一些可能优势不是上面句子所暗示的:

  • As by @AlexHall, functools.partial avoids the late binding mistake 在循环中创建 lambda 时经常出现。

  • functools.partial 可能 使一些读者的意图更清楚。 (这显然是个人的,因为任何 FP 背景的读者通常都会强烈偏好 lambda。)

  • In CPython functools.partial 可能比 lambda 快一点,因为它不需要创建 Python 堆栈帧,也不需要执行实际绑定;其优化的 C 实现只需要执行对对象的调用。差异应根据具体情况进行衡量。