炫技:一行代碼解決一道題(用來娛樂的)
假如我們現在有這樣一道題:
我們要輸出,1到100以內所有數字的平方中的偶數,這個題應該如何去求解呢?
是用循環,判斷吧!其實,這個題,可以用以下這行代碼,一行代碼搞定:
print (filter(lambda x:True if x%2==0 else False,list(map(lambda x:x*x,[i for i in range(1,101)]))))
注意:盡量不要養成這樣的代碼習慣!這個只是用來玩的!否則您的同事,同學或者老闆就要抓狂了。
寫這個例子就是展示什麼叫做,functional programming的一行頂10行。實際上在我第一個代碼里,我寫了20多行。但實際上,用一行FP就全部搞定了。
這個是不是特別誇張?其實我們並不用在很多時候寫如此誇張的代碼。代碼,本身是寫給人看的。這種炫技型的代碼並不是非常容易讀懂。這也違背了FP的本意。我在下面的代碼里附上了三種版本,可以供您參考和學習。其中方法二包含了如何用FP增強代碼的可讀性的部分。
在這裡,我們所用的就是非常著名的函數式編程:Functional programming。
提到函數式編程我們就不得不說著名的函數式編程語言Haskell。而python,也對函數式編程,給出了相當一部分支持。
您可以參考廖大的學習資料里關於函數式編程的章節。
匿名函數""" Created on Thu Feb 22 22:39:27 2018 @author: wrm """ #Let us have a list bigtable: #[1,2,3,4,5,6,7,8,9,10] #Now let us construct another list that contains all the even number of the #square list of bigtable #Solution1:
bigtable=[i for i in range(1,11)]def pingfang(x): return x*xsquare_bigtable=[]for term in bigtable:
square_bigtable.append(pingfang(term))#print (square_bigtable) def judge_even(x): if x%2==0: return True else: return False #print judge_even(4)finallist=[]for term in square_bigtable:
if judge_even(term)==True: finallist.append(term)print (finallist)#Here, let us use functional programming: #Solution2bigtable=[i for i in range(1,11)]f1=lambda x:x*xsquare_bigtable=[]square_bigtable=list(map(f1,bigtable))#print (square_bigtable)f2=lambda x:True if x%2==0 else False
#Actually I dont recommend writing like this if you use lambda. That is #not easy to understandfinalresult=filter(f2,square_bigtable)print (finalresult)#Use one line for everything: print filter(lambda x:True if x%2==0 else False,list(map(lambda x:x*x,[i for i in range(1,11)])))順便問一句,在python的環境里如何優雅的插入代碼?感謝。
推薦閱讀:
※Pandas 教程——電影數據是乾淨的嗎(2)
※Python編程(bbb四):兩個實用的Python的裝飾器
※學Python web開發框架到什麼程度可以找到開發的工作?
※Stackoverflow上百萬的Python問題|最火的十個
※如何看待通過《笨辦法學Python》入門編程的行為?
TAG:Python |