11–7. 用 map() 进 行 函 数 式 编 程 。
给 定 一 对 同 一 大 小 的 列 表 , 如 [1 , 2 , 3] 和[‘abc’,’def’,’ghi’,….],将两个标归并为一个由每个列表元素组成的元组的单一的表,以使我们的结果看起来像这样:
{[(1,’abc’), (2, ‘def’), (3, ‘ghi’), …}.
实现代码如下:
File /Users/wgzhao/Sites/blog.wgzhao.com/source/downloads/code/cpp2nd/e11-7.py could not be found
11–8. 用 filter()进行函数式编程.使用练习 5-4 你给出的代码来决定闰年。更新你的代码一边他成为一个函数如果你还没有那么做的话。然后写一段代码来给出一个年份的列表并返回一个只 有闰年的列表。然后将它转化为用列表解析。
实现代码如下:
File /Users/wgzhao/Sites/blog.wgzhao.com/source/downloads/code/cpp2nd/e11-8.py could not be found
11–12. 传递函数。给在这章中描述的 testit()函数写一个姊妹函数。timeit()会带一个函数对象(和参数一起)以及计算出用了多少时间来执行这个函数,而不是测试执行时的错误。返回下 面的状态:函数返回值,消耗的时间。你可以用time.clock()或者 time.time(),无论哪一个给你 提供了较高的精度。
1 2 3 4 5 6 7 8 | |
11–13.使用 reduce()进行函数式编程以及递归。在第 8 张中,我们看到 N 的阶乘或者 N!作为 从 1 到 N 所有数字的乘积。
(a) 用一分钟写一个带 x,y 并返回他们乘积的名为 mult(x,y)的简单小巧的函数。 (b)用你在 a 中创建 mult()函数以及reduce 来计算阶乘。
(c)彻底抛弃掉 mult()的使用,用 lamda 表达式替代。
(d)在这章中,我们描绘了一个递归解决方案来找到 N! 用你在上面问题中完成的 timeit()函数, 并给三个版本阶乘函数计时(迭代的,reduce()以及递归)
File /Users/wgzhao/Sites/blog.wgzhao.com/source/downloads/code/cpp2nd/e11-13.py could not be found
上述程序执行的结果类似如下:
use iteration to calculate 10!
result = 2432902008176640000 cosumer time = 0.000013
use mult function to calculate 10!
result = 2432902008176640000 cosumer time = 0.000015
use lambda function to calculate 10!
result = 2432902008176640000 cosumer time = 0.000014
calculate 10! by recursed
result = 2432902008176640000 cosumer time = 0.000018
由此可以看出,迭代算法是最快的。最慢的就是递归了。 而函数计算里,匿名函数(lambda)比有名函数有稍微快一些。
如果给定的数字加大,这个区别就越明显了。