zoukankan      html  css  js  c++  java
  • 《Python核心编程》第二版第308页第十一章练习 续二 Python核心编程答案自己做的

    本博客列出的答案不是来自官方资源,是我自己做的练习,如果有疑问或者错误,欢迎讨论。

    11-12.
    传递函数。给在这章中描述的testit()函数写一个姊妹函数。timeit()会带一个函数对象(和参数一起)并计算出用了多少时间来执行这个函数,而不是测试执行时的错误。返回下面的状态:函数返回值、消耗的时间。本文来自博客园。你可以用time.clock()或者time.time(),无论哪一个给你提了较高的精度(一般的共识是在POSIX上用time.time(),在win32系统上用time.clock())。注意:timeit()函数与模块timeit不相关(在python2.3中引入)。
    【答案】
    代码如下:

    import time
    
    def timeit(func):
        start_time = time.clock()
        result = func
        end_time = time.clock()
        return (result, end_time - start_time)
    
    def func(a,b):
        return a - b
    
    print timeit(func(2,1))

    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()和递归)。
    【答案】
    (a)代码如下:

    >>> def mult(x,y):
    ...     return x * y
    ...
    >>> mult(2,3)
    6
    >>>


    (b)代码如下:

    >>> def factorial(n):
    ...     return reduce(mult, range(n+1)[1:])
    ...
    >>> factorial(6)
    720
    >>>


    (c)代码如下:

    >>> def factorial(n):
    ...     return reduce((lambda x,y: x*y), range(n+1)[1:])
    ...
    >>> factorial(6)
    720


    (d)代码如下:

    # From www.cnblogs.com/balian/
    #-*- encoding: utf-8 -*-
    
    import time
    
    def timeit(func):
        "计时函数"
        start_time = time.clock()
        result = func
        end_time = time.clock()
        return (result, end_time - start_time)
    
    def factorial_iteration(n):
        "使用循环计算阶乘"
        result = 1
        for eachItem in range(n+1)[1:]:
            result = result * eachItem
        return result
    
    def factorial_lambda(n):
        "使用lambda计算阶乘"
        return reduce((lambda x,y: x*y), range(n+1)[1:])
    
    
    def factorial_recursion(n):
        "使用递归计算阶乘"
        if n == 0 or n == 1: return 1
        else: return (n * factorial_recursion(n-1))
        
    
    number = 6   
    
    print "使用循环计算阶乘 :"
    print timeit(factorial_iteration(number)), '\n'
    
    print "使用lambda :"
    print timeit(factorial_lambda(number)), '\n'
    
    print "使用递归 :"
    print timeit(factorial_recursion(number)), '\n'

    关键词 Python核心编程答案

  • 相关阅读:
    Python3 学习第八弹: 模块学习一之模块变量
    Python3 学习第六弹: 迭代器与生成器
    Python3 学习第五弹:类与面向对象
    Java之泛型
    Java之工具类Collections
    Java之map
    Java集合之List
    Java集合之TreeSet
    Java集合
    Java异常处理
  • 原文地址:https://www.cnblogs.com/balian/p/2623567.html
Copyright © 2011-2022 走看看