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

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.

主站蜘蛛池模板: 临朐县| 桦甸市| 惠水县| 团风县| 大埔县| 孝义市| 丹阳市| 浠水县| 茌平县| 宁陕县| 广安市| 永城市| 南城县| 贵溪市| 榆林市| 陈巴尔虎旗| 迭部县| 滕州市| 德兴市| 五峰| 榆中县| 沙雅县| 武宁县| 梁河县| 丰宁| 元阳县| 清新县| 宜阳县| 平谷区| 秦安县| 韩城市| 康乐县| 汕尾市| 双峰县| 江源县| 如皋市| 那曲县| 镇原县| 三原县| 房产| 巴彦淖尔市|