30填Python基礎(高階函式)

2021-10-23 09:43:12 字數 4268 閱讀 6800

如果⼀個函式的引數是另外⼀個函式,那麼這個函式就可以稱為⾼階函式

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 ...