Linux|系统管理|WEB开发

关注Linux,系统管理,WEB开发以及开源世界

Core Python Programming 2nd Chapter 11 Exercise

| Comments

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
def ex11_12(func,arg=None):
    '''
    ex11_12
    '''
    begin = time.time()
    result = func(arg)
    end = time.time()
    return (result,end - begin )

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)比有名函数有稍微快一些。

如果给定的数字加大,这个区别就越明显了。

Comments