2015-12-28 72 views
1

您能否幫我理解爲什麼在Python中使用filter()而不是def函數?除了它更可讀。爲什麼使用filter()而不是'常用'def函數?

謝謝。

例如,

這一個高清功能:

def do_even_check(num): 
    for i in num: 
     if i % 2 ==0: 
      print(i) 
     else: 
      pass 

my_list = [1,2,3,4,5,6,7,8,9,10] 

do_even_check(my_list) 

而這其中有filter()lambda

filter(lambda num: num % 2 == 0, my_lst) 
+2

你可以提供一個你可能會寫的'def'函數的例子,以及一個用來替換它的'filter'調用嗎?我無法自己提出這樣一個例子。 – Kevin

+0

通常的比較是在'def'和'lambda'之間,或者'filter'和列表解析之間。比較filter和def沒有多大意義。 – wim

+0

你爲什麼這麼認爲?這是最佳做法? –

回答

2

filter選項是更好,因爲結果可能會重新 - 使用,而不是你的do_even_check(num):函數總是打印輸出,阻礙其在其他部分重用他編程。

反正來完成這項任務既不是你的兩個可能性,但發電機表達的最好方式:

evens = (i for i in my_list if i % 2 == 0) 

因爲它是最可讀而簡明的全部。

+0

您也可以將def結果保存到變量中,您始終可以顯示該結果。 –

+0

@TomZarubin不在你的例子中,它只是打印 – Caridorc

0

我主張過濾器,映射和減少(以及列表理解)很有用,因爲它們通常會導致更少的代碼行,這會使代碼更易於維護。它們從功能範例中被採用,其中一些語言提倡安全。儘管python不是一種類型安全的語言,但它可以通過使用這些函數(過濾器,映射,縮小)或者甚至是在自己的defs中的函數構建來創建可預測性,然後您將知道它們的返回值(項目列表或單個值),並且可能他們也被團隊中的其他開發人員所瞭解,並且可能會更好地記錄下來,而您的defs可能是無效的(沒有返回的值,如打印函數),返回蘋果或字符串或任何其他值。

相關問題