WEB开发网
开发学院软件开发Python 使用 itertools 模块中的组合函数 阅读

使用 itertools 模块中的组合函数

 2007-03-29 12:37:13 来源:WEB开发网   
核心提示: 让我来演示一下 weave() 的行为,因为从实现上看不是很明显:>>> for x in weave('abc', xrange(4), [10,11,12,13,14]):...print x,...a 0 10 b 1 11 c 2 12 13 3

让我来演示一下 weave() 的行为,因为从实现上看不是很明显:

>>> for x in weave('abc', xrange(4), [10,11,12,13,14]):
...  print x,
...
a 0 10 b 1 11 c 2 12 13 3 14

即使一些迭代器到达终点,但其余迭代器会继续产生值,直到在某一时刻产生了所有可用的值为止。

我将另外只提出一个可行的 itertools 函数。提出这个函数主要是受到了构思问题的函数编程方法的启发。 icompose() 与上面提出的函数 ireduce() 存在某种对称。但是在 ireduce() 将值的(惰性)序列传递给某个函数并产生每个结果的地方, icompose() 将函数序列应用于每个前趋函数的返回值。可以把 ireduce() 用于将事件序列传递给长期活动的对象。而 icompose() 可能将对象重复地传递给返回新对象的赋值函数。第一种方法是相当传统的考虑事件的 OOP 方法,而第二种的思路更接近于 FP。

以下是可能的 icompose() 实现:

清单 5. icompose() 的样本实现

def icompose(functions, initval):
  currval = initval
  for f in functions:
    currval = f(currval)
    yield currval

结束语

迭代器 - 被认为是惰性序列 - 是功能强大的概念,它开启了 Python 编程的新样式。但是在只把迭代器当作数据源与把它作为一种序列来考虑之间存在着微妙的差别。这两种想法本质上哪一种都不见得比另一种更正确,但是后者开创了操作编程事件的一种组合性的简略表达方法。 itertools 中的组合函数(尤其是它可能产生的一些类似于我建议的函数)接近于编程的声明样式。对我而言,这些声明样式一般都更不易出错且更强大。

上一页  1 2 3 4 5 6 

Tags:使用 itertools 模块

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接