Python中filter篩選函式匿名引數問題
阿新 • • 發佈:2018-12-31
最近在學習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]))
函式名也是一種變數,挺強大!