標籤:

炫技:一行代碼解決一道題(用來娛樂的)

假如我們現在有這樣一道題:

我們要輸出,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,也對函數式編程,給出了相當一部分支持。

您可以參考廖大的學習資料里關於函數式編程的章節。

匿名函數www.liaoxuefeng.com圖標

""" 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*x

square_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: #Solution2

bigtable=[i for i in range(1,11)]

f1=lambda x:x*x

square_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 understand

finalresult=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 |