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

Combining generator expressions

The essence of functional programming comes from the ways we can easily combine generator expressions and generator functions to create very sophisticated composite processing sequences. When working with generator expressions, we can combine generators in several ways.

One common way to combine generator functions is when we create a composite function. We may have a generator that computes (f(x) for x in range()). If we want to compute g(f(x)), we have several ways to combine two generators.

We can tweak the original generator expression as follows:

g_f_x = (g(f(x)) for x in range())  

While technically correct, this defeats any idea of reuse. Rather than reusing an expression, we rewrote it.

We can also substitute one expression within another expression, as follows:

g_f_x = (g(y) for y in (f(x) for x in range()))

This has the advantage of allowing us to use simple substitution. We can revise this slightly to emphasize reuse, using the following commands:

f_x = (f(x) for x in range())
g_f_x = (g(y) for y in f_x)  

This has the advantage of leaving the initial expression, (f(x) for x in range()), essentially untouched. All we did was assign the expression to a variable.

The resulting composite function is also a generator expression, which is also lazy. This means that extracting the next value from g_f_x will extract one value from f_x, which will extract one value from the source range() function.

主站蜘蛛池模板: 兴山县| 公安县| 仁怀市| 漳州市| 上高县| 新建县| 江阴市| 德钦县| 汉寿县| 建湖县| 大厂| 卫辉市| 西丰县| 开阳县| 吴堡县| 虞城县| 正镶白旗| 西畴县| 赤壁市| 沁水县| 金川县| 南京市| 高陵县| 芜湖县| 瑞丽市| 加查县| 克山县| 孟州市| 天全县| 中超| 余干县| 四川省| 保康县| 娄底市| 南溪县| 双流县| 都江堰市| 天等县| 大竹县| 重庆市| 肇东市|