官术网_书友最值得收藏!

Looking at object creation

In some cases, it might help to look at intermediate objects as a history of the computation. What's important is that the history of a computation is not fixed. When functions are commutative or associative, then changes to the order of evaluation might lead to different objects being created. This might have performance improvements with no changes to the correctness of the results.

Consider this expression:

>>> 1+2+3+4
10

We are looking at a variety of potential computation histories with the same result. Because the + operator is commutative and associative, there are a large number of candidate histories that lead to the same result.

Of the candidate sequences, there are two important alternatives, which are as follows:

>>> ((1+2)+3)+4
10
>>> 1+(2+(3+4))
10  

In the first case, we fold in values working from left to right. This is the way Python works implicitly. Intermediate objects 3 and 6 are created as part of this evaluation.

In the second case, we fold from right to left. In this case, intermediate objects 7 and 9 are created. In the case of simple integer arithmetic, the two results have identical performance; there's no optimization benefit.

When we work with something like the list append, we might see some optimization improvements when we change the association rules.

Here's a simple example:

>>> import timeit
>>> timeit.timeit("((([]+[1])+[2])+[3])+[4]")
0.8846941249794327
>>> timeit.timeit("[]+([1]+([2]+([3]+[4])))")
1.0207440659869462  

In this case, there's some benefit to working from left to right.

What's important for functional design is the idea that the + operator (or add() function) can be used in any order to produce the same results. The + operator has no hidden side effects that restrict the way this operator can be used.

主站蜘蛛池模板: 新河县| 大兴区| 抚顺市| 普宁市| 信宜市| 太仆寺旗| 西乌珠穆沁旗| 宁波市| 泌阳县| 新昌县| 南汇区| 永年县| 芷江| 盐边县| 岳阳县| 广西| 仙桃市| 罗城| 仙游县| 阳江市| 香河县| 宁海县| 南漳县| 大同市| 新宁县| 江津市| 都兰县| 康平县| 新绛县| 五峰| 留坝县| 萨迦县| 马关县| 温州市| 古交市| 鸡泽县| 庆安县| 富蕴县| 青海省| 芦山县| 高邮市|