Python模板函數簡介說明
下面給大家一個寶貴的建議,對于那些從來沒有學習過編程或者并非計算機專業的編程學習者而言,Python是***的選擇之一,并建議那些初學的程序員先從Python開始學習編程。
今天用Python模板函數寫了兩個程序,水仙花數和***數!經典的c練習題!水仙花數的程序很小,沒什么感覺,***數的程序就復雜一些了!同學用c寫,我用Python寫,代碼幾乎是對等翻譯!我用的機器cpu主頻超過同學的兩倍,內存是同學的4倍,就這樣,程序運行的時間幾乎相同(10w個數據)。
可想而知,Python模板函數作為解釋型語言,速度上面確實是個巨大的問題!我曾經看到有文章說,就算對解釋型語言,Python也是其中比較慢的,可怕。想象一下運行起來比basic還慢的程序。。。!瘋了!還有就是,Python模板函數運行起來必須帶模板的名稱!比如開方的函數!
在函數式編程里面, 我們可以定義匿名函數,也可以把函數賦值給一個變量或作為參數傳遞給另外一個函數,Python語言很早就支持函數式編程,我們可以用lambda關鍵字定義一個匿名函數,然后賦值給一個變量,如下所示:
- from string import strip,upper
- #functions:
- #
- def map_add(x):
- return x+3
- #
- if __name__=='__map_add__':
- map_add(x)
- #zip file
- def zip_file():
- #open file
- f = open('map.txt')
- lines = f.readlines()
- print lines
- f.close()
- #
- print 'BEFORE\n'
- for eachline in lines:
- print '[%s]' % eachline[:-1]
- #
- print 'AFTER\n'
- for eachline in map(upper, map(strip, lines)):
- print '[%s]' % eachline
- #
- if __name__=='__zip_file__':
- zip_file()
lambda定義的匿名函數可以引用外圍函數的變量,上面的代碼中,第二個lambda表達式定義的匿名函數引用了***個匿名函數的參數n,因為***個匿名函數是第二個匿名函數的外圍函數。
除了lambda表達式之外,Python模板函數還支持將函數作為參數傳遞給另外一個函數,有點類似于C語言中的函數指針,Python語言內建的函數filter,map,reduce就可以接受函數參數。
filter(function, sequence)會遍歷sequence中的每一個item,并以該item為參數調用function,如果function返回ture,就將該item加到結果sequence中,這就達到過濾sequence的效果,作為參數的function就是過濾的條件,例子如下:
- >>>reduce(lambda x,y:x*y, [1,2,3,4,5]#((((1*2)*3)*4)*5
- >>>120
- >>>reduce(lambda x,y:x*y, [1,2,3], 10)
- >>>60 #((1*2)*3)*10
這里用lambda定義的匿名函數來定義過濾條件,在list a中返回是偶數的items,下面這個模塊以一個現有的文本為參數,清除多余空格,再把所有文字都轉換為大寫(英文)。為子演示程序要創建一個map.txt該文件中有幾行前后有多余空格的字符串。
【編輯推薦】