1. 程式人生 > 實用技巧 >Python入門學習筆記10:函數語言程式設計:匿名函式、高階函式、裝飾器

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