摘要:函数式编程lambda,map,reduce,filter的应用。其具有三大特性:不可变数据,函数可以像变量一样使用,尾递归优化,每次递归都重用stack。优点在于:并行,惰性求值,确定性。
from functools import reduce
import random
# 函数式编程
def inc(x):
def incx(y):
return x*y
return incx
def inc_test():
inc2=inc(2)
print(1,inc2(6)) # 1 12
inc4=inc(9)
print(2,inc4(4)) # 2 36
# 匿名函数 lambda: 快速定义单行的最小函数
def lambda_test():
gg=lambda x:x*x
print(1,gg(2)) # 1 4
print(2,(lambda x:x*x)(3)) # 2 9
def map_test():
data=['xdsl','huaw','xiaoming','wangwu']
for i in data:
print(len(i))
print("=======================")
res_len=list(map(len,data))
print(res_len) # [4, 4, 8, 6]
dataUp=list(map(toUpper,data))
print(3,dataUp) # 3 ['XDSL', 'HUAW', 'XIAOMING', 'WANGWU']
dataUp1=list(map(lambda x:x.upper(),data))
print(4,dataUp1) # 4 ['XDSL', 'HUAW', 'XIAOMING', 'WANGWU']
items=list(range(1,6))
squared=list(map(lambda x:x**2,items))
print(5,squared) # 5 [1, 4, 9, 16, 25]
def toUpper(item):
return item.upper()
def filter_test():
number=list(range(-10,10))
less_zero=list(filter(lambda x:x<0,number))
print(1,less_zero) # 1 [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1]
def reduce_test():
number=list(range(1,8))
addnumber=reduce(lambda x,y:x+y,number)
print(1,addnumber) # 1 28
addnumber1=reduce(lambda x,y:x+y,number,10)
print(2,addnumber1) # 2 38
def function_test():
number=[random.randint(-10,10) for i in range(10)]
print(number) # [-2, 5, 8, 8, 2, -6, -1, -6, -8, -3]
positive_number=list(filter(lambda x:x>0,number))
average=reduce(lambda x,y:x+y,positive_number)/len(positive_number)
print(average) # 5.75
if __name__ == '__main__':
function_test()