提问人:Clem 提问时间:5/13/2022 最后编辑:Clem 更新时间:5/13/2022 访问量:37
Python 是否在 min() 等内置函数中实现短路?
Does Python implement short-circuiting in built-in functions such as min()?
问:
Python 3 是否尽可能在内置函数中实现短路,就像它对布尔语句所做的那样?
举个具体的例子,下面这段代码:
min((20,11), key = lambda x : x % 10) # 20
Python 是否事先评估作为键参数传递的函数的最小可能值为 0,因此在计算可迭代传递 (20) 中的第一个整数后立即停止,因为 20 % 10 等于 0? 还是在返回答案之前,它是否必须评估可迭代对象中的所有元素?
我想短路甚至并不总是可能的,特别是对于更复杂的函数,但是对于众所周知的内置函数或像 % 这样的运算符呢?
我在官方文档中找不到答案。
谢谢
答:
1赞
Germán Martinez
5/13/2022
#1
Python 必须计算可迭代对象中的所有值,因为语言会逐个元素计算,如果您的元组中有不是数字的东西,它将在尝试执行 % 操作时触发异常。Python 无法猜测列表中的内容。您可以通过定义一个函数而不是 lambda 并在其中设置调试点来测试这一点。
def my_mod(x):
import ipdb; ipdb.set_trace()
return x % 20
然后调用函数
min((20,11), key = my_mod)
你可以做一个快速的错误测试用例
min((20,11, "s"), key = my_mod)
它将触发异常,但首先必须评估列表中的所有先前元素。
评论