python中常見的高階函式
用遞迴求和 讓我們來看一些例子。 要對乙個數字列表(或者其他序列)求和,我們可以使用內建的sum函式,或者自己編寫乙個更加定製化的版本。這裡是用遞迴編寫的乙個定製求和函式的示例:
def
mysum
(l):
ifnot l:
return
0else
:return l[0]
+ mysum(l[1:
])#呼叫自身
print
(mysum([1
,2,3
,4,5
,6])
)
第一次:l = [ 1, 2, 3, 4, 5, 6]
l[0] = 1 , l1 = l[1:] = [2, 3, 4, 5]
第二次:l = l1= [2, 3, 4, 5, 6]
l[0] = 2, l[1:] = [3, 4, 5, 6]
以此類推
在每一層,這個函式都遞迴地呼叫自己來計算列表剩餘的值和
list=[
]def
fa(n)
:if n==1:
return
1if n==2:
return
1else
:return fa(n-1)
+fa(n-2)
for i in
range(1
,11):
list
)print
(list)[
1,1,
2,3,
5,8,
13,21,
34,55]
lambda表示式
lambda的一般形式是關鍵字lambda,之後是乙個或多個引數(與乙個def頭部內用括號括起來的引數列表極其相似),緊跟的是乙個冒號,之後是乙個表示式,即:
lambda para1,para2,..
....
,paran:expression using paras
由lambda表示式所返回的函式物件與由def建立並賦值後的函式物件工作起來是完全一樣的,但是lambda有一些不同之處讓其在扮演特定的角色時很有用
f=
(lambda a=
"tom "
, b =
"loves "
, c=
"python "
:a+b+c)
print
(f()
)print
(f('lilei '))
print
(f('a '
,'ppx '
,'c '))
tom loves python
lilei loves python
a ppx c
高階函式:把乙個函式名,一實參的形式,傳給這個函式的形參,這個函式就稱為高階函式
比如下面的形參c,對應的實參是乙個函式名abs。
#函式abs()的功能是取絕對值
defadd
(a,b,c)
:return c(a)
+c(b)
add_value = add(-9
,1,abs
)print
(add_value)
最正確的高階函式解釋
滿足下面兩個條件之一,就可稱之為高階函式:
例項1:
import time
def bar():
time.sleep(1)
print("函式")
def test1(func):
start_time = time.time()
func()
stop_time = time.time()
print("這個函式的執行時間是 %s"% (stop_time-start_time))
test1(bar)
函式這個函式的執行時間是 1.0101444721221924
例項2:
import time
defbar()
: time.sleep(1)
print
("in the bar"
)def
test2
(func)
:print
(func)
return func
bar = test2(bar)
bar(
)>
in the bar
呼叫
例子:
x =[1
,2,3
,4,5
]y =
filter
(lambda x: x%2==
0,x)
#找出偶數
print
(y)print
(list
(y))
#py3之後filter函式返回的不在是列表而是迭代器,所以需要用list轉換
<
filter
object at 0x0000013cb785b0b8
>[2
,4]
普通函式使用lambda
x =[1
,2,3
,4,5
]def
is_odd
(n):
return n%2==
1print
(list
(filter
(is_odd,x)))
[1,3
,5]
呼叫
例子:
x =[1
,2,3
,4,5
]y =[2
,3,4
,5,6
]z =
map(
lambda x , y : x*y +
2, x, y)
print
(z)print
(list
(z))
<
mapobject at 0x00000294a2a0b1d0
>[4
,8,14
,22,32
]
普通函式:
def
f(x,y)
:return x*y+
2x =[1
,2,3
,4,5
]y =[2
,3,4
,5,6
]print
(list
(map
(f,x,y)
注:map中如果傳入的幾個序列的長度不一,那麼會一句最短的序列進行計算呼叫
例子:
from functools import
reduce
y =[2,
3,4,
5,6]
z =reduce
(lambda x,y: x+y, y)
print
(z)20
li =[1
,2,3
,4,5
,6]a=
1*100000+2
*10000+3
*1000+4
*100+5
*10+6
print
(a)
其計算原理:
先計算骰兩個元素:f(2,3),結果為5;
再把結果和第三個元素計算:f(5,4),結果為9
再把結果和第四個元素計算:f(9,5),結果為14
再把結果和第五個元素計算:f(14,6),結果為20
由於沒有更多的元素了,計算結束,返回結果為20 呼叫
例子:
import numpy as np
import pandas as pd
a=np.random.randint(low=0,high=4,size=(3,5))
print(a)
data = pd.dataframe(a)
print(data)
[[0 2 3 3 0]
[0 2 0 2 3]
[1 2 1 3 2]]
0 1 2 3 4
0 0 2 3 3 0
1 0 2 0 2 3
2 1 2 1 3 2
呼叫 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...