Python 是否在 min() 等内置函数中实现短路?

Does Python implement short-circuiting in built-in functions such as min()?

Python3是否尽可能在内置函数中实现短路,就像布尔值一样声明?

一个具体的例子,拿下面的代码片段:

min((20,11), key = lambda x : x % 10) # 20

Python 是否预先评估作为 key 参数传递的函数的最小可能值为 0,因此在评估第一个整数后立即停止iterable passed (20) 因为 20 % 10 等于 0? 或者它是否必须在返回答案之前评估 iterable 中的所有元素?

我想短路甚至并不总是可能的,尤其是对于更复杂的函数,但是对于众所周知的内置函数或运算符,如 %?

我在官方文档中找不到答案。

谢谢,

python 必须评估 iterable 中的所有值,因为 languaje 逐个元素评估,如果你的元组中有一些不是数字的东西,它会在尝试执行 % 操作时触发异常. 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)

它会触发异常但首先必须评估列表中的所有前一个元素。