在python中有三個基礎函式,分別是filter()、map()和reduce(),他們分別為我們提供過濾、對映和聚合的功能。上一節我們簡單的使用了filter()函式結合匿名函式,下面我們會詳細介紹它的用法。
1. filter()函式
在資料篩選和過濾的時候我們通常會採用filter()函式幫助我們快速的解決問題,它的語法格式為:filter(函式,可迭代物件)
在filter函式中,前面放我們的過濾或篩選方式,即函式名,後面存放可迭代的物件,我們看下面的例子:def test(x):
if x % 2 == 0:
return x
my_list = [1,2,3,4,5,6]
print(filter(test,my_list))#只需要些函式名即可,不用加引數
輸出結果:
關於這個例子,我們首先定義了乙個test()函式,如果x是偶數則返回其值,然後通過filter()函式使用test()函式來過濾my_list列表,但是輸出結果卻是,在這裡我們需要注意filter()函式的返回值為乙個可迭代的物件,我們需要通過迭代的方式訪問其中的值,或者使用列表list()函式強制型別轉換。def test(x):
if x % 2 == 0:
return x
my_list = [1,2,3,4,5,6]
print(filter(test,my_list))
for i in filter(test,my_list):
print('迭代後中的資料:',i)
print('使用list()方法:',list(filter(test,my_list)))
輸出結果為:迭代後中的資料: 2
迭代後中的資料: 4
迭代後中的資料: 6
使用list()方法: [2, 4, 6]
2. map()函式
在前面我們曾多次使用到過map()函式,例如我們在輸入多個值的時候,我們會採用map()函式,我們需要輸入四個值的時候:a,b,c,d = map(int,input().split())
print(a,b,c,d)
map()函式的語法格式為:map(函式,可迭代物件)
在使用map()函式的時候,我們大多用於對資料的處理,把可迭代物件中的資料經過函式處理之後儲存,我們在儲存的時候繼續採用list()函式進行儲存。
我們先看上面輸入四個值的例子,int為函式,input().splite輸入的值為可迭代的物件,經過int函式的處理後存放在map物件當中。
我們可以通過map()函式將乙個序列中的所有資料通過乙個函式進行處理,看下面的例子:
我們在乙個列表中存放了一下字母,如果存在小寫字母,那麼將它變成大寫字母。
**如下:def test(x):
if x.islower():
return x.upper()
else:
return x
my_list = ['d','o','t','c','p','p']
print(list(map(test,my_list)))
輸出結果為:['d', 'o', 't', 'c', 'p', 'p']
test()函式中會先對x進行判斷,如果是小寫字母就返回它的大寫字母,如果不是小寫字母就返回它的值。
3. reduce()函式
reduce()函式用於把可迭代的物件通過函式方法進行聚合。
語法格式為:reduce(函式, 可迭代物件[, 初始值])
舉個例子,我們已知乙個列表為[1,2,3,4],我們需要求列表裡所有項依次相乘的和,我們可以使用reduce()函式。from functools import reduce#reduce函式在functools模組中定義,需要引入
def test(x,y):
return x * y
my_list = [1,2,3,4]
print(reduce(test,my_list))
輸出結果為:
第一行**為引入這種方法,後面會對模組進行講解,test()函式返回了兩個資料相乘,然後通過reduce()函式將my_list列表處理。
處理過程如下圖:
先執行第一步,然後得到乙個結果再和後一項相乘,依次到最後一位。
4. 總結
這三種函式我們常用的為前兩者,熟練掌握這三個函式能夠幫助我們解決一系列複雜的問題,下一節我們來學習遞迴函式。
函式基礎(三) 巢狀函式 匿名函式
講完作用域之後 對變數的作用範圍有大致的了解了嗎?講個稍微小高階的東西吧 能夠幫助你更加的理解全域性和區域性變數 從小的一點一點的往大了裝,乙個巢狀乙個 函式也可以這麼玩 msg 我是全域性變數 def func msg 我是函式func的區域性變數 def func1 msg 我是函式func1的...
pythonc函式 在Python中使用C函式
我已經嘗試過網際網路上提到的所有解決方案,但沒有乙個對我有效。在 我有乙個python 為了加快速度,我希望我的 在c函式中執行繁重的計算。我已經寫了這個c函式。在 然後,為了共享這個庫,我在終端做了這個 gcc shared wl,install name,testlib.so o testlib...
前端基礎(三) 函式
在最新的es規範中,宣告函式有4中方法 函式宣告 函式表示式 建構函式function 生成器函式 語法 function name param param2 name 函式名稱 param 需要傳遞給函式的引數的名稱。有最大引數數量限制,不同引擎限制不同。statements 包含函式體的語句 函...