1. 程式人生 > >Python中filter篩選函式匿名引數問題

Python中filter篩選函式匿名引數問題

最近在學習python,覺得有個地方很有意思,稍作記錄,方便以後查閱。

Python內建的filter()函式用於過濾序列。

簡單來講,就是針對一個序列中的每個元素,呼叫一個判別函式,根據函式返回的True和False(Python中的bool型別必須嚴格為True和False),決定是否刪除這個元素。

有意思的地方正在於這個判別函式的入參。如果僅根據待篩選值即可確定是否過濾,那麼直接指定函式名即可,待篩選值會作為入參傳入該函式;如果篩選邏輯需要額外的引數,則使用lambda表示式返回匿名函式,作為判別函式使用。

先以一個形參為例,即_filter(x):
1、如果呼叫時未傳入實參,則x為序列中帶判別值,例如:

def is_odd(n):
    return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))

執行後輸出為:[1, 5, 9, 15]

2、如果篩選邏輯需要額外的引數,則使用lambda表示式返回匿名函式,例如:

def is_odd(n):
    return lambda x: x % n == 1

n = 2
list(filter(is_odd(n), [1, 2, 4, 5, 6, 9, 10, 15]))

函式名也是一種變數,挺強大!