- Functional Python Programming
- Steven F. Lott
- 286字
- 2021-08-27 19:20:20
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.
- Drupal 8 Blueprints
- Power Up Your PowToon Studio Project
- Learning Docker
- Python從菜鳥到高手(第2版)
- INSTANT Django 1.5 Application Development Starter
- Advanced Express Web Application Development
- Illustrator CC平面設計實戰從入門到精通(視頻自學全彩版)
- Building Serverless Architectures
- 零基礎學Scratch 3.0編程
- Python數據可視化之美:專業圖表繪制指南(全彩)
- C# 7.0本質論
- Isomorphic Go
- HTML5+jQuery Mobile移動應用開發
- ArcGIS Blueprints
- Mastering Web Application Development with Express