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
原文地址:https://www.cnblogs.com/liuxiaoming123/p/13376372.html