2024-04-25 02:03:22 发布
网友
#L is a very large list A = [x/sum(L) for x in L]
当解释器计算这个值时,sum(L)将被计算多少次?就一次,还是每个元素一次?你知道吗
我会选择Martijn的方法,但我想指出的是,如果您想保留“一行”,可以(ab)使用带有默认参数的lambda和map,例如:
lambda
map
L = range(1, 10) A = map(lambda el, total=sum(L, 0.0): el / total, L)
列表理解对每个迭代执行表达式。你知道吗
对每个x in L执行sum(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,等等
sum()
L
__add__
__iter__
sum
x
__div__
换句话说,Python过于动态,无法准确预测表达式结果。你知道吗
我会选择Martijn的方法,但我想指出的是,如果您想保留“一行”,可以(ab)使用带有默认参数的
lambda
和map
,例如:列表理解对每个迭代执行表达式。你知道吗
对每个
x in L
执行sum(L)
。在列表外计算一次:Python无法知道
sum(L)
的结果是稳定的,并且无法为您优化调用。你知道吗sum()
可以返回到另一个返回随机值的函数。L
中的元素可以实现产生副作用的__add__
方法;内置的sum()
将调用这些方法。L
本身可以实现一个定制的__iter__
方法,该方法在迭代时就地更改列表,从而影响列表理解和sum()
调用。这些钩子中的任何一个都可以重新绑定sum
,或者给x
元素一个__div__
方法来改变sum
,等等换句话说,Python过于动态,无法准确预测表达式结果。你知道吗
相关问题 更多 >
编程相关推荐