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