1 #函数式编程:匿名函数、高阶函数、装饰器 2 3 #匿名函数 4 5 6 def add(x,y):#常规函数 7 return x+y 8 9 10 print(add(1,2)) 11 12 f = lambda x,y: x+y#匿名函数 13 print(f(1,2)) 14 15 # lambada 表达式 16 # lambada parameter_list : expression 17 18 19 # 三元表达式 20 21 # x,y x 大于 y x 否则 y 常规写法 x > y ? x :y 22 # 条件为真时返回的结果 if 条件判断 else 条件为假时的返回结果 23 x = 1 24 y = 3 25 r = x if x > y else y 26 print(r) 27 28 29 # map 方法与for循环类似 30 list_x = [1,2,3,4,5,6,7,8] 31 list_y = [1, 4, 9, 16, 25, 36, 49, 64] 32 33 34 def square(x): 35 return x * x 36 37 38 # for x in list_x: 39 # square(x) 40 # print(square(x)) 41 42 r = map(square,list_x) 43 print(list(r)) 44 45 #匿名函数代替square表达式 46 list_x1 = [1,2,3,4,5,6,7,8] 47 list_y1 = [1,2,3,4,5,6,7,8] 48 r1 = map(lambda x:x*x,list_x1) 49 print(list(r1)) 50 # map函数可传入多个列表 多个列表进行计算 51 r2 = map(lambda x,y:x*y,list_x1,list_y1) 52 print(list(r2)) 53 54 # reduce 连续计算,连续调用lambada(单列表进行连续计算) 55 from functools import reduce 56 list_x1_str = ['1','2','3','4','5','6','7','8'] 57 r3 = reduce(lambda x,y:x+y,list_x1_str,'aaa') #根据list_x1数组在reduce方法中使用匿名函数的算法为:第一次数组第一个和第二个元素作为x,y,第二次取上一数组的值和第三个元素作为新的x,y进行运算,依此类推 58 print(r3) 59 # map/reduce 在大数据中作为 编程模型 映射 归约 并行计算 函数式编程 60 # filter 过滤器 61 list_filter = [1,0,1,0,0,1] 62 list_filter_u = ['a','B','c','F'] 63 r5 = filter(lambda x: True if x==1 else False,list_filter) 64 r6 = filter(lambda x : x,list_filter) 65 print(list(r5),list(r6)) 66 67 #命令式编程 68 # map/reduce/filter/lambda 69 70 #函数式编程 71 #def/if else/for 72 #lisp 函数式编程的鼻祖(人工智能领域用的比较多) 73 74 #装饰器 75 #装饰器在其他语言中的应用:Python:装饰器 C#:特性 Java:注解 76 77 import time 78 79 80 def f1(): 81 #print(time.time()) 82 print('This is a function1') 83 84 85 #f1() 86 87 88 def f2(): 89 print('This is a function2') 90 91 92 def print_current_time(func): 93 print(time.time()) 94 func() 95 96 97 """ 98 等价于 99 print(time.time()) 100 f1() 101 print(time.time()) 102 f2() 103 """ 104 105 106 print_current_time(f1) 107 print_current_time(f2) 108 109 110 # 装饰器 111 112 113 def decorator(func1): 114 def wrapper(*args,**kwargs):#kwargs关键字参数 key word aygs 115 print(time.time()) 116 func1(*args,**kwargs) 117 return wrapper 118 119 120 @decorator 121 def f3(func_name): 122 #print(time.time()) 123 print('This is a function3' + func_name) 124 #等价于 f3 = decorator(f3) 125 126 127 @decorator 128 def f4(func_name1,func_name2): 129 #print(time.time()) 130 print('This is a function4' + func_name1,func_name2) 131 132 #@decorator 133 def f5(func_name1,func_name2,**kwargs): 134 #print(time.time()) 135 print('This is a function4' + func_name1,func_name2,kwargs) 136 137 138 f3('test func') 139 f4('name1','name2') 140 f5('name1','name2',a=1,b=2,c='123')