如果⼀個函式的引數是另外⼀個函式,那麼這個函式就可以稱為⾼階函式
1 map
map是系統內建函式,map函式接收兩個引數,⼀個是函式,⼀個是可迭代物件(iterable),map將傳⼊的函式依次作⽤到序列的每個元素,並把結果作為新的iterator返回。
"""
map(function,iterable)
引數1:function,函式,函式的引數個數取決於後⾯序列的個數
引數2:iterable,⼀個序列或多個序列
功能:將傳⼊的函式依次作⽤於序列中的每⼀個元素,並把結果作為新的iterator返 回
"""#1.傳⼊函式⼀個引數
deffun
(x):
return x **
2#需求:獲取⼀個列表中每個元素的平⽅,⽣成⼀個新的列表
l1 =
map(fun,[1
,2,3
,4])
print
(l1)
##返回的是迭代器
print
(list
(l1)
)#[1, 4, 9, 16] #將迭代器轉換為迭代物件
#傳⼊函式2個引數
l1 =[1
,2,3
,4]l2 =[2
,3,4
,5,6
,7]def
mul(x, y)
:return x * y
#注意如果兩個列表⻓度不⼀樣,以短的為主計算,函式是平⾏取值,也就是說x取l1的
值,y取l2的值
gen1 =
map(mul,l1,l2)
#可以使⽤lambda表示式
print
(list
(gen1)
)#[2, 6, 12, 20]
#提取字典的鍵
gen3 =
map(
lambda x:
int(x),)
print
(list
(gen3)
)#[1,2]
#元組gen4 =
map(
lambda x,y:
(x,y),[
1,2,
3,4,
5],[
1,2,
3])print
(list
(gen4)
)#[(1, 1), (2, 2), (3, 3)]
2 reduce
reduce()函式也是functools模組中的⼀個⾼階函式。需要引⼊functools模組才能使⽤。
functools.
reduce
(f, iterable[
, initializer]
)引數1:函式,這個函式需要兩個引數。
引數2:可迭代物件
引數3:可選,是預設值
返回值:f函式計算的結果
'''from functools import
reduce
#1.累加求和
defadd
(x,y)
return x + y
print
(reduce
(f,[1,
2,3,
4,5]
,5))
計算過程:
(1)a = f(1,
2)#將1賦值給x,2賦值給y (2)a = f(a,3) #a賦值給x,3賦值給y (3)a = f(a,4)
(4)a = f(a,5)
(5)f(d,10)
=20#將序列變成整數
print
(reduce
(lambda x,y:x*
10+y,[9
,0,7
,8])
)#9078
3 filter
filter是內建函式,可以對可迭代物件進⾏過濾,去除不滿⾜條件的元素
filter
(function, iterable)
引數: function 確定是否保留元素,為真保留,為假去除元素,function的值可以
none
iterable 可迭代物件
返回值:⼀個新的迭代器或迭代物件
#1 過濾掉⾮字串資料
print
(filter
(lambda x:
isinstance
(x,str),
['1',8
,'2',3
,true
,0.9])
)等價於:
[s for s in
['1',8
,'2',3
,true
,0.9]if
isinstance
(s,str)]
#2 回⽂數
#回⽂數判斷
defis_palindrome
(n):
l1 =
list
(str
(n))
#將數字轉換為字串,再將字串轉為列表
l2 = l1[::
-1]#獲取反向列表
if l1 == l2:
#列表⽐較,⻓度相同,每⼀個元素都相同則為真
return
true
return
false
#找出1-1000內所有的回⽂數
print
(list
(filter
(is_palindrome,
range(1
,1001))
))
4 sorted
sorted是內建函式,⽤於對有序序列進⾏排序,⽣成⼀個新序列
sorted
(iterable[
, key]
[, reverse]
)引數:iterable 排序物件,可以列表、元組、字串等有序序列
key ⼀個函式,作⽤於序列的每⼀個元素,根據函式返回值進⾏排序,
具體的函式的引數就是取⾃於可迭代物件中,
reverse 預設從⼩到⼤排序,如果reverse為true則從⼤到⼩排序
返回值: 新的序列
#字串排序
print
(sorted([
'bob'
,'about'
,'zoo'
,'credit'
], key=
str.lower)
)#指定
把元素變為⼩寫後再排序
#多維資料排序l=[
('a',1
),('b',2
),('c',6
),('d',4
),('e',3
)]print
(sorted
(l,key=
lambda x:x[1]
))#使⽤元組的第⼆個元素排序
students =[,
,]print
(sorted
(students,key=
lambda elem:elem[
'age'])
)#指定⽤age排序
排列和組合
import itertools
#排列mylist =
list
(itertools.permutations([1
,2,3
,4],
2))print
(mylist)
print
(len
(mylist)
)#組合
mylist =
list
(itertools.combinations([1
,2,3
,4,5
],5)
)print
(mylist)
print
(len
(mylist)
)#笛卡爾積
#repeat 重複3次
mylist =
list
(itertools.product(
"qwertyuiop"
, repeat=3)
)print
(mylist)
print
(len
(mylist)
)
python基礎 高階函式
把函式作為引數傳入,這樣的函式稱為高階函式,高階函式是函式式程式設計的體現。函式式程式設計就是指這種高度抽象的程式設計正規化。在python中,abs 函式可以完成對數字求絕對值計算。abs 10 10round 函式可以完成對數字的四捨五入計算。round 1.2 1 round 1.9 2def...
Python基礎 高階函式 Map Reduce
map 函式接受2個引數 1.引數 函式 2.引數 iterable 示例 usr bin env python3 coding utf 8 map 函式的使用 轉換為字串 deffuntion x return str x deftest mlist 1,2,3,4,5 list 1,2,3,4,...
Python基礎 高階函式 sorted
就是比誰是老大 示例 usr bin env python3 coding utf 8 python 高階函式的sorted 用法 反手就是乙個排序 defsortedtest 函式,序列 result sorted 3,4,1,5,0 print result sortedtest 執行結果 d ...