《Python核心編程》第二版第308頁第十一章練習 續二 -Python核心編程答案-自己做的-

來源:互聯網
上載者:User

本部落格列出的答案不是來自官方資源,是我自己做的練習,如果有疑問或者錯誤,歡迎討論。

11-12.
傳遞函數。給在這章中描述的testit()函數寫一個姊妹函數。timeit()會帶一個函數對象(和參數一起)並計算出用了多少時間來執行這個函數,而不是測試執行時的錯誤。返回下面的狀態:函數傳回值、消耗的時間。本文來自部落格園。你可以用time.clock()或者time.time(),無論哪一個給你提了較高的精度(一般的共識是在POSIX上用time.time(),在win32系統上用time.clock())。注意:timeit()函數與模組timeit不相關(在python2.3中引入)。
【答案】
代碼如下:

import timedef timeit(func):    start_time = time.clock()    result = func    end_time = time.clock()    return (result, end_time - start_time)def func(a,b):    return a - bprint 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 timedef 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 resultdef 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核心編程答案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.