函數一些類型

函數(2.0)

遞歸函數

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

斐波那契數列

def fib(x):
    if x ==1:
        return 1
    elif x==2:
        return 1
    else:
        return fib(x-1)+fib(x-2)
print(fib(5),fib(9))
5 34

匿名函數

格式

lambda para1,para2,...,paran:expression using paras
###關鍵字'lambda' + 若干參數 + : +函數表達式(參數的相關運算操作)
f=lambda  a,b='b',c='c': a+b+c ##參數定義與普通函數相同
print(f('1','2','3'))
print(f('a'))
123
abc

高階函數

定義:

把一個函數名,以實參的形式,傳遞給這個函數的形參。

def add(a,b,func):
    return func(a)+func(b)
print(add('2','5',int))   ##傳入2個字符串,以及一個強制類型轉換的函數(int)
7

filter函數

filter(function, sequence):對sequence中的item依次執行function(item),將執行結果爲True的item組成一個List/String/Tuple(取決於sequence的類型)。filter(function or None, sequence) -> list, tuple, or string:入參爲函數和列表/元組/字符串,返回值爲item列表/元組/字符串。 篩選

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)

map函數

map(function, sequence) :對sequence中的item依次執行function(item),將執行結果function(item)組成一個List返回。 map(function, sequence[, sequence, …]) -> list:入參是爲函數和列表/元組/字符串,返回值爲function(item)列表。 映射

print(list(map(lambda x:x%2,range(10))))
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1] ##將列表的所有元素做lambda操作
print(list(map(lambda x,y:x+y,range(1,5),range(100,104))))
[101, 103, 105, 107]
############高階函數實現map####################
def f(f2,li):
    rst=[]
    for i in li:
        rst.append(f2(i))
    return rst
def f2(x):
    return x*x-1
print(f(f2,[1,2,3,4,5,6,7,8]))
[0, 3, 8, 15, 24, 35, 48, 63]

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

reduce函數

reduce(function, sequence, starting_value):對sequence中的item順序迭代調用function,如果有starting_value,還可以作爲初始值調用。function接收的參數個數只能爲2,先把sequence中第一個值和第二個值當參數傳給function,再把function的返回值和第三個值當參數傳給function,然後只返回一個結果。reduce(function, sequence[, initial]) -> value:入參是爲函數和列表/元組/字符串和初始值,返回值爲數值。

reduce用法:先把sequence中第一個值和第二個值當參數傳給function,再把function的返回值和第三個值當參數傳給fuction,最終返回一個結果值
print reduce(lambda x,y:x*y-4,range(4))
-40
#計算0到100的和(初始值0)
print reduce(lambda x,y:x+y, range(101))
5050
#計算0到100的和(初始值100)
print reduce(lambda x,y:x+y, range(101),100) 初始值爲100
5150
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章