使用 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 中的组合函数(尤其是它可能产生的一些类似于我建议的函数)接近于编程的声明样式。对我而言,这些声明样式一般都更不易出错且更强大。
[]
- ››使用脚本恢复WinXP系统的用户登录密码
- ››使用phpMyadmin创建数据库及独立数据库帐号
- ››使用Zend Framework框架中的Zend_Mail模块发送邮件...
- ››使用cout标准输出如何控制小数点后位数
- ››使用nofollow标签做SEO的技巧
- ››使用 WebSphere Message Broker 的 WebSphere Tra...
- ››使用SQL Server事件探查器做应用程序的性能分析
- ››使用SQL Server事件探查器分析死锁原因
- ››使用纯文本文件打造WCF服务
- ››使用 Dojo 开发定制 Business Space 小部件,第 4...
- ››使用 ADDRESS 与 INDIRECT函数查询信息
- ››使用 COLUMN函数编制单元信息
更多精彩
赞助商链接