python高階函式

2021-09-25 17:26:09 字數 4401 閱讀 1461

遞迴雖然寫法簡單,但是運算速度較慢,有最大遞迴限制(1000次)

用函式寫斐波那契數列:

def

fibonacci

(n):

if n ==1:

return

1if n ==2:

return

1else

:return fibonacci(n -1)

+ fibonacci(n -2)

print

(fibonacci(5)

)print

(fibonacci(10)

)'''555

'''

lambda的主體是乙個單獨的表示式,而不是乙個**塊

def

func

(x, y, z)

:return x + y + z

print

(func(2,

3,4)

)'''

9'''

可以用匿名函式寫為:

f =

lambda x, y, z: x + y + z

print

(f(2,3

,4))

'''9

'''

filter(function, sequence)

對sequence中的item依次執行function(item),將執行結果為true的item組成乙個list/string/tuple(取決於sequence的型別)。

filter(function or none, sequence) -> list, tuple, or string

print

(list

(filter

(lambda x:x%2,

range(10

))))

'''[1, 3, 5, 7, 9] #匿名函式返回2的餘數,偶數為false(餘數為0) 故返回0-9的奇數

'''li1=[1

,2,3

,4,5

,6,7

,8,9

]li2=[1

,3,6

,8]print

(list

(filter

(lambda x:x not

in li2,li1)))

'''[2, 4, 5, 7, 9] #得到2個列表非重複的部分(型別li1-li2)

'''

print

(list

(filter((

lambda x: x %2==

0),range(5

))))

'''[0, 2, 4]

'''

map(function, sequence)

對sequence中的item依次執行function(item),將執行結果function(item)組成乙個list返回。

map(function, sequence[, sequence, …]) -> list:入參是為函式和列表/元組/字串,返回值為function(item)列表。

li =[1

,2,3

,4,5

]res =

map(

lambda x: x +

1, li)

print

(list

(res)

)'''

[2, 3, 4, 5, 6]

'''

x=[1

,2,3

,4,5

]y =[2

,3,4

,5,6

]res=

map(

lambda x,y:x*y+

2,x,y)

print

(list

(res)

)'''

[4, 8, 14, 22, 32]

'''

注:map與filter都是先傳入乙個function(函式),再傳入乙個sequence(列表/元組/字串),但是filter是返回sequence中滿足function的元素(運算返回true),map是返回sequence各個元素經過function後的返回值

在python3中位於functools模組中

reduce(function, sequence, starting_value)

接受並處理乙個迭代器,但是它本身不可迭代

對sequence中的item順序迭代呼叫function,如果有starting_value,還可以作為初始值呼叫。

function接收的引數個數只能為2,先把sequence中第乙個值和第二個值當引數傳給function,再把function的返回值和第三個值當引數傳給function,然後只返回乙個結果。

reduce(function, sequence[, initial]) -> value:入參是為函式和列表/元組/字串和初始值,返回值為數值。

from functools import

reduce

#從functools模組中匯入

y =[2,

3,4,

5,6]

z =reduce

(lambda x, y: x + y, y)

# 傳遞初始值100

# f(x,y)=x+y

# 1--->f(2,3)=5--->[5,4,5,6]

# 2--->f(5,4)=9--->[9,5,5]

# 3--->f(9,5)=14--->[14,6]

# 4--->f(14,6)=20

print

(z)'''

20'''

from functools import

reduce

y =[2,

3,4,

5,6]

z =reduce

(lambda x, y:

10*x + y, y)

print

(z)'''

23456

'''

from functools import

reduce

y =[2,

3,4,

5,6]

z =reduce

(lambda x, y:

10*x + y, y,

100)

# 傳遞初始值100

print

(z)'''10023456'''

用於將可迭代的物件作為引數,將物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的列表。

如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同,利用 * 號操作符,可以將元組解壓為列表。

import numpy as np

a = np.random.randint(low=

0, high=

4, size=(2

,4))

print

(a)'''

[[2 2 3 3]

[0 2 0 0]]

'''a =[1

,2,3

]b =[4

,5,6

]c =[4

,5,6

,7,8

]ziptest1 =

zip(a, b)

print

(list

(ziptest1)

)'''

[(1, 4), (2, 5), (3, 6)]

'''for i in ziptest1:

print

(i)'''

(1, 4)

(2, 5)

(3, 6)

'''star_zip =

zip(

*ziptest1)

print

(list

(star_zip)

)'''

[(1, 2, 3), (4, 5, 6)]

'''

a =

b =c =

tp =

tuple

(c)print

(tp)

'''(5, 6)

'''print

(list

(zip

(a, b, c)))

'''[(1, 3, 5), (2, 4, 6)]

'''

python 函式高階 python 函式高階

形參角度 萬能引數 動態接收位置引數 args 動態接收關鍵字引數 kwargs 的魔性用法 函式定義時 代表聚合。他將所有的位置引數 聚合成乙個元組,賦值給了args 函式定義時 將所有的關鍵字引數聚合成乙個字典中,將這個字典賦給了 kwargs 和 在函式的呼叫時 代表打散 僅限關鍵字引數 de...

Python高階 函式高階

閉包 closure 常規函式中可以在函式的引數中新增引數的預設值來簡化函式的操作,偏函式也可以做到這一點,而且會更加的方便管理函式的操作。通過內建模組functools的partial進行定義和處理 語法結構 新函式名稱 functools.partial 函式名稱,預設賦值引數 例如 全域性函式...

python 函式 高階函式

filter 函式是 python 內建的另乙個有用的高階函式,filter 函式接收乙個函式 f 和乙個list,這個函式 f 的作用是對每個元素進行判斷,返回 true或 false,filter 根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。例如判斷奇偶數 def...