在可能的情况下,short-circuiting在内置函数中实现Python3,就像对布尔语句一样吗?
一个具体的例子是下面的代码片段:
min((20,11), key = lambda x : x % 10) # 20Python是否事先计算作为键参数传递的函数的最小值为0,因此在计算可迭代传递( 20 )中的第一个整数(20% 10 )等于0之后立即停止?还是必须在返回答案之前对迭代中的所有元素进行评估?
我想短路并不总是可能发生的,特别是对于更复杂的函数,但是对于众所周知的内置函数或者像%这样的运算符来说又如何呢?
我在官方文件里找不到答案。
谢谢,
发布于 2022-05-13 14:19:20
python必须计算迭代中的所有值,因为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)它将触发异常,但首先必须计算列表中的所有前一个元素。
https://stackoverflow.com/questions/72229276
复制相似问题