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

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.

主站蜘蛛池模板: 合山市| 上虞市| 三亚市| 敦煌市| 曲水县| 广汉市| 嫩江县| 临泽县| 榕江县| 乌拉特前旗| 大田县| 乐亭县| 聂荣县| 巴彦县| 玛曲县| 仪征市| 广宗县| 烟台市| 岚皋县| 柏乡县| 滨海县| 高安市| 长白| 勃利县| 延边| 靖江市| 阳谷县| 万山特区| 囊谦县| 洛隆县| 泸西县| 台中市| 廊坊市| 南和县| 无极县| 万荣县| 革吉县| 甘洛县| 浠水县| 台中市| 和田市|