python解释器是否重用结果以提高效率?

2024-04-25 02:03:22 发布

您现在位置:Python中文网/ 问答频道 /正文

#L is a very large list
A = [x/sum(L) for x in L]

当解释器计算这个值时,sum(L)将被计算多少次?就一次,还是每个元素一次?你知道吗


Tags: in元素foris解释器listverylarge
2条回答

我会选择Martijn的方法,但我想指出的是,如果您想保留“一行”,可以(ab)使用带有默认参数的lambdamap,例如:

L = range(1, 10)
A = map(lambda el, total=sum(L, 0.0): el / total, L)

列表理解对每个迭代执行表达式。你知道吗

对每个x in L执行sum(L)。在列表外计算一次:

s = sum(L)
A = [x/s for x in L]

Python无法知道sum(L)的结果是稳定的,并且无法为您优化调用。你知道吗

sum()可以返回到另一个返回随机值的函数。L中的元素可以实现产生副作用的__add__方法;内置的sum()将调用这些方法。L本身可以实现一个定制的__iter__方法,该方法在迭代时就地更改列表,从而影响列表理解sum()调用。这些钩子中的任何一个都可以重新绑定sum,或者给x元素一个__div__方法来改变sum,等等

换句话说,Python过于动态,无法准确预测表达式结果。你知道吗

相关问题 更多 >