Python入门学习笔记10:函数式编程:匿名函数、高阶函数、装饰器

  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')

 

posted @ 2020-07-21 16:47  霜井  阅读(120)  评论(0编辑  收藏  举报