自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

簡介Python版本選擇

開發(fā) 后端
上面的示例已經(jīng)顯示出函數(shù)在 Python 中所處的第一類的地位,但以很微妙的方式。在使用 lambda 操作創(chuàng)建函數(shù)對象時(shí),我們有一些完全常規(guī)的事物。

本文對Python的版本選擇,IDE選擇及編碼的解決方案進(jìn)行了一番詳細(xì)的描述,實(shí)為Python初學(xué)者必讀的Python學(xué)習(xí)經(jīng)驗(yàn)心得,一種方式是主程序使用一門高級語言,比如C++進(jìn)行編寫,然后對其嵌入一個腳本解釋器,在運(yùn)行時(shí)動態(tài)執(zhí)行一些腳本函數(shù);

但正如我們可以使用數(shù)字 23 而無需將它與任何名稱綁定一樣(換句話說,象函數(shù)自變量一樣),我們可以使用用 lambda 創(chuàng)建的函數(shù)對象而不用將它與任何名稱綁定。一個函數(shù)只是我們在 Python 中對其執(zhí)行某些操作的另一個值。

我們對第一類對象所執(zhí)行的主要操作是將它們傳遞給 FP 內(nèi)置函數(shù) map()、reduce() 和 filter()。這些函數(shù)中的每一個都接受函數(shù)對象作為其第一個自變量。 map() 對指定列表中每個對應(yīng)的項(xiàng)執(zhí)行傳遞的函數(shù),并返回結(jié)果列表。

 reduce() 對每個后續(xù)項(xiàng)執(zhí)行傳遞的函數(shù),返回的是最終結(jié)果的內(nèi)部累加;例如 reduce(lambda n,m:n*m, range(1,10)) 意味著“10 的階乘”(換句話說,用每一項(xiàng)乘上前一次相乘的乘積)。 #t#

filter() 使用傳遞的函數(shù)對列表中的每一項(xiàng)“求值”,然后返回經(jīng)過甄別的,通過了傳遞函數(shù)測試的項(xiàng)的列表。 我們還經(jīng)常將函數(shù)對象傳遞給自己的定制函數(shù),但它們通常等同于上述內(nèi)置函數(shù)的組合。

通過將這三種 FP 內(nèi)置函數(shù)進(jìn)行組合,可以執(zhí)行驚人的一系列“流”操作(都不使用語句,而只使用表達(dá)式)。 Python 中的函數(shù)循環(huán) 替換循環(huán)與替換條件塊一樣簡單。

for 可以直接轉(zhuǎn)換成 map()。對于我們的條件執(zhí)行,我們需要將語句塊簡化成單一函數(shù)調(diào)用(我們正逐步接近通常的做法):while 的轉(zhuǎn)換仍需要 while_block() 函數(shù),它本身包含語句而不僅僅是表達(dá)式。但我們需要對該函數(shù)做進(jìn)一步的消除(例如對模板中的 if/else 進(jìn)行短路)。

另外,因?yàn)檠h(huán)主體(按設(shè)計(jì))無法更改任何變量值,所以 <cond> 很難用在一般的測試中,例如 while myvar==7(那么,將在 while_block() 中修改全部內(nèi)容)。添加更有用條件的一個方法是讓 while_block() 返回一個更有趣的值,然后將這個返回值與終止條件進(jìn)行比較。有必要看一下這些消除語句的具體示例:

  1. # imperative version of "echo()"   
  2. def echo_IMP():   
  3. while 1:   
  4. x = raw_input("IMP -- ")   
  5. if x == 'quit':   
  6. break   
  7. else   
  8. print x   
  9. echo_IMP()   
  10.  
  11. # utility function for "identity with side-effect"   
  12. def monadic_print(x):   
  13. print x   
  14. return x   
  15.  
  16. # FP version of "echo()"   
  17. echo_FP = lambda: monadic_print(raw_input("FP -- "))=='quit' or echo_FP()   
  18. echo_FP()  

我們所完成的是設(shè)法將涉及 I/O、循環(huán)和條件語句的小程序表示成一個帶有遞歸的純表達(dá)式(實(shí)際上,如果需要,可以表示成能傳遞到任何其它地方的函數(shù)對象)。我們的確仍然利用了實(shí)用程序函數(shù) monadic_print(),但這個函數(shù)是完全一般性的,可以在我們以后創(chuàng)建的每個函數(shù)程序表達(dá)式中重用(它是一次性成本)。

請注意,任何包含 monadic_print(x) 的表達(dá)式所求值的結(jié)果都是相同的,就象它只包含 x 一樣。FP(特別是 Haskell)對于“不執(zhí)行任何操作,在進(jìn)程中有副作用”的函數(shù)具有“單一體”意思。

【編輯推薦】

  1. 如何使Python嵌入C++應(yīng)用程序?
  2. 深入探討Ruby與Python語法比較
  3. Python學(xué)習(xí)資料介紹分享
  4. Python學(xué)習(xí)經(jīng)驗(yàn)談:版本、IDE選擇及編碼解決方案
  5. 淺析Python的GIL和線程安全
責(zé)任編輯:chenqingxiang 來源: 博客園
相關(guān)推薦

2010-02-24 17:38:45

Python 3.1版

2009-04-01 17:58:28

MercurialPython版本控制

2010-05-31 14:56:59

SVN版本管理軟件

2009-02-06 09:08:04

Scala函數(shù)語言輕量級

2009-12-17 16:02:58

紅旗Linux

2016-08-10 17:23:36

PythonUrllibURL

2010-08-06 13:56:40

思科路由器IOS軟件版本

2010-03-18 13:53:34

2009-08-17 15:07:18

Python學(xué)習(xí)經(jīng)驗(yàn)

2012-08-08 10:31:41

IBMdW

2009-02-25 10:34:57

異常處理體系Python

2010-02-01 10:04:25

Python模板函數(shù)

2011-08-17 10:11:34

MySQL數(shù)據(jù)庫MVCC

2021-02-16 23:43:53

深度學(xué)習(xí)人工智能IT

2023-03-02 17:44:30

DevOps開發(fā)

2010-03-01 17:02:16

Fedora scim

2013-01-17 15:53:48

Windows 8

2021-07-08 06:30:03

Linux CPULinux 系統(tǒng)

2011-06-13 09:04:50

小型企業(yè)Windows

2009-05-22 09:35:41

SQL Server版本區(qū)別版本比較
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號