1. 程式人生 > 實用技巧 >Python入門學習筆記12:pythonnic補充

Python入門學習筆記12:pythonnic補充

  1 # 字典對映來代替switch
  2 
  3 day = 6
  4 
  5 
  6 def get_sunday():
  7     return 'Sunday'
  8 
  9 
 10 def get_monday():
 11     return 'Monday'
 12 
 13 
 14 def get_tuseday():
 15     return 'Tuseday'
 16 
 17 
 18 def get_default():
 19     return 'Unkown'
 20 
 21 
 22 switcher = {
 23     0:get_sunday,
24 1:get_monday, 25 2:get_tuseday 26 } 27 28 #day_name = switcher[day] 29 day_name = switcher.get(day,get_default)() #若陣列中不存在對應的key則展示'Unkown',由於該返回值是一個方法故後加 括號() 30 print(day_name) 31 32 # 列表推導式(支援列表、set、dict) 33 # 集合推導式 34 #列表形式 35 a = [1,2,3,4,5,6,7,8] 36 #將列表中的每一項求平方 37 #方法一:列表推導式
38 b = [i*i for i in a if i >=5] # i**2 等價於 i*i ; i**3 代表i的三次方 ; if條件可放在迴圈後 39 print('b',b) #b [25, 36, 49, 64] 40 #方法二:map函式 41 def square(x): 42 return x ** 2 43 b1 = map(square, [1, 2, 3, 4, 5]) 44 print('b1',list(b1))#b1 [1, 4, 9, 16, 25] 45 #發放三:map函式lambada表示式 46 b2 = map(lambda
x: x**2, [1,2,3,4,5]) 47 print('b2',list(b2))#b2 [1, 4, 9, 16, 25] 48 49 """ 50 #多個引數的lambada表示式的寫法: 51 map(lambda x, y: x+y,[1,3,5,7,9],[2,4,6,8,10]) 52 53 # 結果如下: 54 [3,7,11,15,19] 55 """ 56 57 #set集合(set也可以被推導) 58 a1 = {1,2,3,4,5,6,7,8} 59 b3 = [i*i for i in a if i >=5] 60 print('b3:',b3) 61 62 # dict字典:列表推導式 63 students = { 64 '喜小樂':18, 65 '石敢當':20, 66 '橫小五':15 67 } 68 #列表推導式 69 b4 = [key for key,value in students.items()]#欄位無法被遍歷需將字典呼叫items()方法來用來遍歷 70 print('b4',b4) 71 #set推導式 72 b5 = {value:key for key,value in students.items()}#將字典中的key、value顛倒 73 print('b5',b5) 74 #元組推導式 75 b6 = (key for key,value in students.items()) 76 for x in b6: 77 print('b6',x) 78 79 #課程補充 80 #None 空 不等於空字串、不等於空的列表、不等於0、不等於False 81 #型別,值 82 83 a = '' 84 b = False 85 c = [] 86 print(a==None,b==None,c==None,a is None,type(None))#False False False False <class 'NoneType'> 87 88 89 def fun(): 90 return None 91 92 a = fun() 93 a = [] 94 if not a: 95 print('S') 96 else: 97 print('F') 98 if a is None: 99 print('S') 100 else: 101 print('F') 102 103 #判空推薦寫法 104 105 #a不為空時 106 if a: 107 pass 108 #a為空時 109 if not a: 110 pass 111 """ 112 True False 對應關係 113 114 '' [] None 對應False 115 116 自定義物件 117 118 """ 119 120 class Test(): 121 def __len__(self): 122 return 0 123 class Test1(): 124 def __len__(self): 125 return 8 126 class Test2(): 127 pass 128 class Test3(): 129 def __len__(self): 130 return '8' 131 class Test4(): 132 def __len__(self): 133 return True 134 135 class Test5(): 136 # __bool__() 優先順序比較高 137 def __bool__(self): 138 print('bool called') 139 return False 140 def __len__(self): 141 print('len called') 142 return True 143 test = Test() 144 if test: 145 print('S') 146 if not test: 147 print('F') 148 149 print(bool(None)) 150 print(bool([])) 151 print(bool(Test())) 152 print(bool(Test1())) 153 print(bool(Test2())) 154 #print(bool(Test3())) #方法返回值為字串、浮點型 會報錯: TypeError: 'str' object cannot be interpreted as an integer 155 # False False False True True 156 print(len(Test4()),bool(Test4())) # 1 True 157 print(bool(Test5()))# bool called False