1 # ----------------------------函数的高级使用-----------------------------------
2
3 # 1. 偏函数
4 #
5 # def test(a, b, c, d=1):
6 # print(a + b + c + d)
7 #
8 # # test(1, 2, 3)
9 #
10 # # def test2(a, b, c=5, d=1):
11 # # test(a, b, c, d)
12 #
13 #
14 # # test2(1, 2)
15 #
16 # import functools
17 #
18 # newFunc = functools.partial(test, c=5)
19 # print(newFunc, type(newFunc))
20 #
21 # newFunc(1, 2)
22
23
24 # numStr = "100010"
25 # result = int(numStr, base=2)
26 # print(result)
27 #
28 # # 在往后的一段时间内, 我都需要把一个二进制的字符串, 转换成为对应的十进制数据
29 # import functools
30 # int2 = functools.partial(int, base=2)
31 # print(int2(numStr))
32
33
34
35 # 2. 高阶函数
36
37
38
39
40 # a, b 形参, 变量
41 # 传递数据, 就是指, 给变量赋值
42
43 # 函数本身, 也可以作为数据, 传递给另外一个变量
44 # def test(a, b):
45 # print(a + b)
46 #
47 #
48 #
49 # print(test)
50 # print(id((test)))
51 #
52 # test2 = test
53 # test2(1, 2)
54
55 # l = [{"name": "sz", "age": 18}, {"name": "sz2", "age": 19}, {"name": "sz3", "age": 18.5}]
56 #
57 # def getKey(x):
58 # return x["name"]
59 #
60 # result = sorted(l, key=getKey)
61 # print(result)
62
63
64 # def caculate(num1, num2, caculateFunc):
65 # result = caculateFunc(num1, num2)
66 # print(result)
67 #
68 #
69 # def sum(a, b):
70 # return a + b
71 #
72 # def jianfa(a, b):
73 # return a - b
74 #
75 # caculate(6, 2, jianfa)
76
77
78
79 # 返回函数
80
81
82
83
84 # def getFunc(flag):
85 # # 1. 再次定义几个函数
86 # def sum(a, b, c):
87 # return a + b + c
88 # def jian(a, b, c):
89 # return a - b - c
90 #
91 # # 2. 根据不同的flag值, 来返回不同的操作函数
92 # if flag == "+":
93 # return sum
94 # elif flag == "-":
95 # return jian
96 #
97 #
98 #
99 # result = getFunc("-")
100 # # print(result, type(result))
101 # res = result(1, 3, 5)
102 # print(res)
103
104
105
106 # 匿名函数
107
108
109 # result = (lambda x, y : x + y)(1, 2)
110 #
111 # print(result)
112 #
113 # newFunc = lambda x, y : x + y
114 # print(newFunc(4, 5))
115
116
117 #
118 # l = [{"name": "sz", "age": 18}, {"name": "sz2", "age": 19}, {"name": "sz3", "age": 18.5}]
119 #
120 # # def getKey(x):
121 # # return x["name"]
122 #
123 # # result = sorted(l, key=getKey)
124 # result = sorted(l, key=lambda x: x["age"])
125 # print(result)
126
127
128 # 闭包
129
130
131 # def test():
132 # a = 10
133 # def test2():
134 # print(a)
135 #
136 # return test2
137 #
138 #
139 # newFunc = test()
140 # newFunc()
141
142
143
144 # print("---------------------123-------------------------")
145
146 # def line_config(content, length):
147 #
148 # def line():
149 # print("-"*(length // 2) + content + "-"*(length // 2))
150 # return line
151 #
152 #
153 # line1 = line_config("闭包", 40)
154 #
155 #
156 # line1()
157 # line1()
158 # line1()
159 # line1()
160 #
161 # line2 = line_config("xxxx", 80)
162 #
163 # line2()
164 # line2()
165 # line2()
166
167
168
169
170
171
172 # def test():
173 # num = 10
174 # def test2():
175 # nonlocal num
176 # num = 666
177 # # print(a)
178 # print(num)
179 #
180 # print(num)
181 # test2()
182 # print(num)
183 #
184 # return test2
185 #
186 #
187 #
188 # result = test()
189
190 # result()
191
192
193
194
195
196 # def test():
197 # a = 1
198 # def test2():
199 # print(a)
200 # a = 2
201 #
202 # # a = 2
203 #
204 # return test2
205 #
206 # newFunc = test()
207 #
208 # newFunc()
209
210 # 函数, 什么时候,才会确定, 内部, 变量标识, 对应的值
211 # 当函数被调用的时候, 才会真正的确定, 对应的值, 到底是什么, 之前,, 都是以普通的变量标识名称而存在
212 # def test():
213 # print(b)
214 #
215 # print("xxxx")
216 # test()
217
218
219
220
221
222
223
224
225
226
227
228
229
230 # def test():
231 # funcs = []
232 # for i in range(1, 4):
233 # def test2():
234 # print(i)
235 # funcs.append(test2)
236 # return funcs
237 #
238 # newFuncs = test()
239 #
240 # print(newFuncs)
241 #
242 # newFuncs[0]()
243 # newFuncs[1]()
244 # newFuncs[2]()
245
246
247 #
248 # def test():
249 # funcs = []
250 # for i in range(1, 4):
251 # def test2(num):
252 # # num = 1
253 # def inner():
254 # print(num)
255 # return inner
256 # funcs.append(test2(i))
257 # return funcs
258 #
259 # newFuncs = test()
260 #
261 # print(newFuncs)
262 #
263 # newFuncs[0]()
264 # newFuncs[1]()
265 # newFuncs[2]()